flutter项目打包步骤及踩坑
1、下载、配置Flutter
下载Flutter
国内访问Flutter大概率会被限制住的,China Flutter User Group (CFUG
) 维护着一个 Flutter 简体中文网站以及镜像,这里有一篇关于在中国网络环境下使用 Flutter的文章:在中国网络环境下使用 Flutter | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter
如果在国内要下载Flutter,可以在CFUG
这里维护的版本列表下载:版本列表 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter
配置国内镜像
国内访问Flutter大概率会被限制住的,所以我们要手动指定镜像地址,修改系统环境变量:
export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn
追加环境路径变量
选择Flutter版本的时候更多的是看Dart的版本,有些项目中指定了Dart版本的范围,太高版本的Dart可能用不了
将在上面版本列表中下载的Flutter解压到非管理位置,然后将该全路径追加到环境变量中的Path变量中
测试Flutter
配置完成之后,重开一下CMD,在任意路径下执行flutter --version
,能看到版本号就说明正常了
2、下载Android Studio
打包Android APK的时候需要用到相关的依赖,就可以利用Android Studio,缺啥依赖勾上就行
下载Android Studio的时候,需要提前确保自己有科学上网的环境:developer.android.com/studio?hl=zh-cn,一直“下一步”走下去即可,因为是公司电脑所以能勾选的都勾上了
因为我采用的是标准安装,也就是默认的方式,并不知道SDK会放在哪里,所以需要在设置里面找:
之后就可以在环境变量中把全路径设置为变量ANDROID_HOME
的值
3、利用flutter doctor查看环境情况
打开一个新的命令提示符或PowerShell窗口并运行命令flutter doctor
可以查看是否需要安装任何依赖项来完成安装:
一般按照上面的步骤做完就OK了,如果出现Visual Studio/ IDEA
报✗
的情况也无所谓,如果有报错,根据相关提示解决即可
如果是Andruid Studio / Android toolchain
那边的错误,就需要检查上一步的环境变量是否设置了ANDROID_HOME
,或者有缺少的依赖没有勾选
4、下载VS Code
Android Studio运行占用的资源比较大,所以一般代码直接在常用的编辑器上写就行,多数人推荐使用VS Code,但个人实测VS Code不如IDEA,有时候要按照内容搜索文件的时候,IDEA很容易就可以做到
5、执行打包命令
Flutter打包安卓APK的命令是flutter build apk
6、更换对应的key
在项目的android/key.properties
中,一般storeFile 路径指向的密钥库文件
由于是 Gradle 项目,学过的话可能会比较熟悉
7、检查kotlin_version、minSdkVersion
一般在android\app\build.gradle
中对项目编译最小SDK版本和所使用打包的SDK版本会有所规定,如果下载AS的时候没有下载对应的API,需要在More Actions > SDK Manager
中补充下载
如果出现Kotlin与Gradle不兼容的报错
可以结合Gradle与Flutter的兼容性表:
父目录中的android\build.gradle
一般会规定对应的kotlin_version,修改即可:
8、切换flutter版本
pubspec.yaml
中environment > sdk
限制了dart的版本,
对照Flutter的版本列表进行下载:
下载完之后只需要将新的bin目录替换掉之前环境变量中设置的Path变量即可
9、Gradle缓存导致一直报Kotlin版本问题
在第七步修改之后还一直出现
查看上面的主要异常如下:
e: C:/Users/Zepore/.gradle/caches/transforms-3/e6134980be5cc682036b443eef52b6ca/transformed/core-1.9.0/jars/classes.jar!/META-INF/core_release.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.7.1, expected version is 1.5.1.
e: C:/Users/Zepore/.gradle/caches/transforms-3/07b0e9b3aebb2992f89d3bc720c84e20/transformed/lifecycle-runtime-2.6.1/jars/classes.jar!/META-INF/lifecycle-runtime_release.kotlin_module: Module was compiled with an incompatible version of Kotlin. The binary version of its metadata is 1.8.0, expected version is 1.5.1.
可以发现基本上来自于Gradle的缓存,确定好这一点以及Gradle与Flutter的版本兼容,直接将缓存目录给删除,果然,一下子就解决了,打包也很快( •̀ ω •́ )✧
满足这个问题主要有两个特征:
- 不管版本高低都统一说Kotlin需要升级到最新
- 报错的位置都来自于缓存目录
参与讨论
(Participate in the discussion)
参与讨论