Flutter App签名打包

app签名

Android系统在安装APK的时候,首先会检验APK的签名,如果发现签名文件不存在或者校验签名失败,则会拒绝安装,所以应用程序在发布之前一定要进行签名。

创建一个秘钥库

在 Windows 系统上,执行下面的命令

注意:参数validity为有效天数

keytool -genkey -v -keystore D:/key.jks -storetype JKS -keyalg RSA -keysize 2048 -validity 10000 -alias key

执行后会在你的D盘根目录生成key.jks文件。

注意:保持文件私密; 不要将它加入到公共源代码控制中。

注意:keytool可能不在你的系统路径中。它是Java JDK的一部分,它是作为Android Studio的一部分安装的。有关具体路径,请百度。

如果你安装了jdk,提示keytool命令不存在,则需要将jdk安装目录(C:\Program Files\Java\jdk-15.0.2\bin)添加到你的用户环境变量Path中

在应用程序中引用秘钥库

创建一个名为/android/key.properties的文件,其中包含对密钥库的引用:

storePassword=秘钥库口令
keyPassword=秘钥库口令
keyAlias=key
storeFile=key.jks文件路径

注意:这个文件一般不要提交到代码仓库

修改.gitignore文件

# Android ignore
/android/key.properties

在gradle中配置签名

1.替换

android {

为:

def keystorePropertiesFile = rootProject.file('key.properties')

if (keystorePropertiesFile.exists()) {
    def keystoreProperties = new Properties()
    keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
}

android {

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 {
        signingConfig signingConfigs.release
    }
}

现在我们发布的app就会被自动签名了

打包应用程序

目前Android支持打包两种应用程序:APK、AAB APK文件: Android application package

# 运行 flutter build apk (flutter build 默认带有 --release 参数)
flutter build apk

AAB文件: Android App Bundle Google推出的一种新的上传格式,某些应用市场不支持的 会根据用户打包的aab文件,动态生成用户设备需要的APK文件

# 运行 flutter build appbundle。 (运行 flutter build 默认构建一个发布版本。)
flutter build appbundle

参考来源:

简书
Flutter中文网