Flutter 打包与踩坑

1,620 阅读2分钟

Android打包

打包过程

1. app 签名

如果您有现有 keystore,请跳至下一步。如果没有,请通过在运行以下命令来创建一个:

keytool -genkey -v -keystore D:/key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias key
  • -keystore 参数后的值:D:/key.jks 是在D盘下生成一个key.jks的文件。文件名称可以自定义。
  • -alias 参数后面的值:key 是app签名文件的别名,不一定是key也可以自定义别名。
    key
    把生成好的文件找一目录放好。
    注意: 保持文件私密; 不要将它加入公共源代码控制中。

2. 配置key

在项目android目录下新建文件 “ key.properties

storePassword=密匙库口令
keyPassword=key密匙口令
keyAlias=key别名
storeFile=路径

列如:
storePassword=123456
keyPassword=123456
keyAlias=key
storeFile=D:/001/001/flutter/key.jks

3. 配置build.gradle

3.1. 打开android/app/build.gradle文件
找到

android {

在android {之前加上以下三句

def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))

android {
...

3.2. 找到以下代码

buildTypes {
    release {
        // TODO: Add your own signing config for the release build.
        // Signing with the debug keys for now, so `flutter run --release` works.
        signingConfig signingConfigs.debug
    }
}

把这段代码替换为:

    signingConfigs {
        release {
            keyAlias keystoreProperties['keyAlias']
            keyPassword keystoreProperties['keyPassword']
            storeFile file(keystoreProperties['storeFile'])
            storePassword keystoreProperties['storePassword']
        }
    }

    buildTypes {
        release {
            // 替换成 release
            signingConfig signingConfigs.release
        }
    }

4. 最后一步开始打包apk

在Terminal中输入命令 “ flutter build apk

最后生成的apk(app-release.apk)在项目目录的 build\app\outputs\apk\release

我在打包过程中遇到的报错和踩过的坑

gradle 版本错误

err2
这个错误是版本过低的问题,我们打开android/gradle/gradle-wrapper.properties文件。
把最后一行的gradle-4.10.2-all.zip改为gradle-5.6.2-all.zip后,在把build目录和android目录下的.gradle目录删除重新编译。
注意:是.gradle不是gradle

#Fri Jun 23 08:50:38 CEST 2017
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip

除了以上的原因外,还有其他原因也会导致这个错误出现。例如:项目的应用图标大小与对应的图标目录不一致或者启动页图片有问题,在打包时也会出现这个问题。
推荐使用插件自动生成应用图标。 flutter_launcher_icons

启动页图片问题报错

 failed to read PNG signature: file does not start with PNG signature.

这个问题真是我不小心踩的坑,本来我的启动页图片是jpg文件,但是我把它改成了png图片。
项目开发过程中倒是没出什么问题,但是打包就出现以下的问题了

err4
把图片格式改回原来的格式就可以正常打包了