###前言
在前文中,我们已经介绍了Flutter中一些基本Widget的使用方法。接下来,我们将重点讲解如何在实际项目中构建和生成Android包。本文将主要介绍纯Flutter项目生成Android包的方法,并分享我们在此过程中遇到的问题。现在,让我们进入正文部分吧!
- 1、生成签名文件
这个步骤对于一个Android开发来说应该是很简单的,这里我就不进行赘述,需要的小伙伴可以参考Android的签名文件生成两种方法 - 2、配置gradle文件
在/android/目录下创建一个key.properties的文件,包含我们所需要一些内容,例如
在android/app/build.gradle文件中添加以下信息: ``` storePassword 你签名设置的密码 keyPassword 你签名设置的密码 keyAlias 你签名的别名 storeFile 你的签名文件存放的路径 ```下面是改写后的文本: ```java def keystorePropertiesFile = rootProject.file(key.properties) def keystoreProperties = new Properties() if (keystorePropertiesFile.exists()) { keystoreProperties.load(new FileInputStream(keystorePropertiesFile)) } android { ... signingConfigs { release { keyAlias keystoreProperties['keyAlias'] keyPassword keystoreProperties['keyPassword'] storeFile file(keystoreProperties['storeFile']) storePassword keystoreProperties['storePassword'] } } } ```接下来,在android/app/build.gradle文件中插入以下内容
在进行打包之前,需要对Android的配置进行一些调整。具体如下: ``` android { ... buildTypes { release { signingConfig signingConfigs.release // 使用正式release配置 minifyEnabled true // 是否压缩 useProguard true // 打开混淆 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 配置混淆文件 } } } ``` 经过以上的前期配置,现在可以执行以下命令来进行打包。
- cd到工程目录下
- flutter build apk
顺利的话我们会看到如下内容
在MacBook-Pro上的tianchibinde文件夹中,使用Flutter构建APK时,您正在生成一个包含android-arm、android-arm64和android-x64二进制文件的大型APK。如果您要将应用程序部署到Play Store上,建议使用应用程序捆绑包或拆分APK以减小APK大小。要生成应用程序捆绑包,请运行以下命令:flutter build appbundle --target-platform android-arm,android-arm64,android-x64。了解更多信息,请访问:https://developer.android.com/guide/app-bundle。要按ABI拆分APK,请运行以下命令:flutter build apk --target-platform android-arm,android-arm64,android-x64 --split-per-abi。了解更多信息,请访问:https://developer.anQ1: ProcessException: Executable contains incompatible CPU type. The complete log is as follows:
ProcessException: 在可执行文件中存在错误的CPU类型 命令:/Users/tiancb/Desktop/Android/flutter/bin/cache/artifacts/engine/android-arm-release/darwin-x64/gen_snapshot --causal_async_stacks --deterministic --snapshot_kind=app-aot-elf --elf=/Users/tiancb/Desktop/Flutter/flutter_build_apk/build/app/intermediates/flutter/release/android-arm/app.so --strip --no-sim-use-hardfp --no-use-integer-division /Users/tiancb/Desktop/Flutter/flutter_build_apk/build/app/intermediates/flutter/release/android-arm/app.dill#0 runCommandAndStreamOutput (package:flutter_tools/src/base/process.dart:142:27) #1 GenSnapshot.run (package:flutter_tools/src/base/build.dart:75:12) #2 AOTSnapshotter.build. (package:flutter_tools/src/base/build.dart:211:27) #3 AOTSnapshotter._timedStep (package:flutter_tools/src/base/build.dart:344:33) #4 AOTSnapshotter.build (package:flutter_tools/src/base/build.dart:210:13) #5 BuildAotCommand.runCommand (package:flutter_tools/src/commands/build_aot.dart:149 :56) #6 FlutterCommand.verifyThenRunCommand(package :flutter_tools /src /runner /flutter_command .dart :478 :18) #7 FlutterCommand.run. ( package : flutter _tools /src /runner ) #8 AppContext.run. ( package : flutter _tools ) #9 _rootRun( dart:async/zon e. dart:1124:13) #10_CustomZone .run( dart:async/zon e. dart:1021:19) #11_runZoned( dart:async/zon e. dart:1516:10) #12 runZoned( dart:async/zon e. ) #13 AppContext.run( package : flutter _tools /src /base/context .dart :152 :18) #14 FlutterCommand.run ( package : flutter _tools /src /runner/flutter_command .dart :375:20) #15 CommandRunner.runCommand (package:args/command_runner.dart:197:27) #16 FlutterCommandRunner.runCommand. ( package : flutter _tools/src/runner/flutter_command_runner.dart:396 :21) #17 AppContext.run. ( package : flutter_tools/src/base/context .dart :153 :29) #18_rootRun( dart:async/zone.dart ) #19_CustomZone .run( d art:a sync/zone.d art ) #20_runZoned( d art:a sync/zone.d art ) #21 runZoned (dart:async/zone.dart) #22 AppContext.run (package:flutter_tools/src/base/context.dart:152:18) #23 FlutterCommandRunner.runComman d(package:flutter_tools/src/runne运行以下命令以接受Android许可证:flutter doctor --android-licenses
执行完之后会有一个
请确认是否接受?(y/N):直接选择y即可。Q2 - Could not download …
完整的错误日志是无法解析配置“:app:releaseCompileClasspath”的所有文件。无法下载 armeabi_v7a_release.jar (io.flutter:armeabi_v7a_release:1.0.0-af04338413c3ed73316350f64248a152433073b6)。无法获取资源'http://download.flutter.io/io/flutter/armeabi_v7a_release/1.0.0-af04338413c3ed73316350f64248a152433073b6/armeabi_v7a_release-1.0.0-af04338413c3ed73316350f64248a152433073b6.jar'。无法访问'http://download.flutter.io/io/flutter/armeabi_v7a_release/1.0.0-af04338413c3ed73316350f64248a152433073b6/armeabi_v7a_release-1.0.0-af04338413c3ed73316350f64248a152433073b6.jar'。连接到 download.flutter.io 失败:80 [download.flutter.io / 172,217,160,80,download.flutter.io / 2404:68001] 失败:主机不可达(连接失败)。 * 尝试: 运行时使用--stacktrace选项获取堆栈跟踪。运行时使用--info或--debug选项获取更多日志输出。运行时使用--scan以获得完整的洞察力。 * 出了什么问题:翻墙 - 你懂的
结语
至此,关于纯Flutter项目的打包过程已经详细介绍完毕。
欢迎大家指正,以下是我Flutter系列的链接,将持续更新。
文章系列:探索 Flutter 的奇妙世界
- Flutter 学习 - 开篇
- Flutter 学习 - 基础框架
- Flutter 学习 - 网络请求和数据解析
- Flutter 学习 - Widget 之 Text
- Flutter 学习 - Widget 之 RichText
- Flutter 学习 - Widget 之 Image和Icon
- Flutter 学习 - Widget 之 TextField
- Flutter 学习 - Widget 之 菜单按钮
- Flutter 学习 - Widget 之 布局 Widget
- Flutter 学习 - 容器类Widget
- Flutter 学习 - 可滚动的 Widget
- Flutter 学习 - 功能类Widget
更多关于技术相关的内容请关注博主公众号–迷途程序猿
还木有评论哦,快来抢沙发吧~