flutter项目打包步骤及踩坑

1、下载、配置Flutter

下载Flutter

国内访问Flutter大概率会被限制住的,China Flutter User Group (CFUG) 维护着一个 Flutter 简体中文网站以及镜像,这里有一篇关于在中国网络环境下使用 Flutter的文章:在中国网络环境下使用 Flutter | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter

如果在国内要下载Flutter,可以在CFUG这里维护的版本列表下载:版本列表 | Flutter 中文文档 - Flutter 中文开发者网站 - Flutter

image-20240625095713261

配置国内镜像

国内访问Flutter大概率会被限制住的,所以我们要手动指定镜像地址,修改系统环境变量:

export PUB_HOSTED_URL=https://pub.flutter-io.cn
export FLUTTER_STORAGE_BASE_URL=https://storage.flutter-io.cn

image-20240625090343286

追加环境路径变量

选择Flutter版本的时候更多的是看Dart的版本,有些项目中指定了Dart版本的范围,太高版本的Dart可能用不了

将在上面版本列表中下载的Flutter解压到非管理位置,然后将该全路径追加到环境变量中的Path变量中

测试Flutter

配置完成之后,重开一下CMD,在任意路径下执行flutter --version,能看到版本号就说明正常了

image-20240625092342067

2、下载Android Studio

打包Android APK的时候需要用到相关的依赖,就可以利用Android Studio,缺啥依赖勾上就行

下载Android Studio的时候,需要提前确保自己有科学上网的环境:developer.android.com/studio?hl=zh-cn,一直“下一步”走下去即可,因为是公司电脑所以能勾选的都勾上了

image-20240625103719012

因为我采用的是标准安装,也就是默认的方式,并不知道SDK会放在哪里,所以需要在设置里面找:

image-20240625104643351

image-20240625104538571

之后就可以在环境变量中把全路径设置为变量ANDROID_HOME的值

image-20240625104924506

3、利用flutter doctor查看环境情况

打开一个新的命令提示符或PowerShell窗口并运行命令flutter doctor可以查看是否需要安装任何依赖项来完成安装:

image-20240625105713340

一般按照上面的步骤做完就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 项目,学过的话可能会比较熟悉

企业微信截图_17192747344370

7、检查kotlin_version、minSdkVersion

一般在android\app\build.gradle中对项目编译最小SDK版本和所使用打包的SDK版本会有所规定,如果下载AS的时候没有下载对应的API,需要在More Actions > SDK Manager中补充下载

image-20240625140917555

如果出现Kotlin与Gradle不兼容的报错

image-20240625143429646

可以结合Gradle与Flutter的兼容性表

image-20240625143338571

父目录中的android\build.gradle一般会规定对应的kotlin_version,修改即可:

image-20240625141909854

8、切换flutter版本

pubspec.yamlenvironment > sdk限制了dart的版本,

image-20240625145646252

对照Flutter的版本列表进行下载:

image-20240625145746561

下载完之后只需要将新的bin目录替换掉之前环境变量中设置的Path变量即可

9、Gradle缓存导致一直报Kotlin版本问题

在第七步修改之后还一直出现

image-20240625150832788

查看上面的主要异常如下:

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的版本兼容,直接将缓存目录给删除,果然,一下子就解决了,打包也很快( •̀ ω •́ )✧

image-20240625151120239

满足这个问题主要有两个特征:

  1. 不管版本高低都统一说Kotlin需要升级到最新
  2. 报错的位置都来自于缓存目录