APP签名的目的的确保APP的安装包来自于原创作者,且APP没有被篡改。
具体步骤如下:
1、生成签名文件(*.jks,如有现成的文件请忽略),打开“终端”,直接输入如下命令:
keytool -genkey -v -keystore ~/asign.jks -keyalg RSA -keysize 2048 -validity 10000 -alias asign
其中,asign.jks为文件名。这里最好修改下文件名,因为使用了重复的.jks在生成apk时会报错;
validity 10000中的10000是有效天数,可修改;
alias asign中的asign为别名,可修改;
然后输入口令等几项内容,最后确认无误后在[否]: 后面输入“Y”回车即可。
生成后会提示:
JKS 密钥库使用专用格式。建议使用 "keytool -importkeystore -srckeystore asign.jks -destkeystore asign.jks -deststoretype pkcs12" 迁移到行业标准格式 PKCS12。
请继续复制其内容在终端中执行:
keytool -importkeystore -srckeystore asign.jks -destkeystore asign.jks -deststoretype pkcs12
执行后会提示:
已将 "asign.jks" 迁移到 Non JKS/JCEKS。将 JKS 密钥库作为 "asign.jks.old" 进行了备份。
查看生成的jks文件:
keytool -list -v -keystore asign.jks
2、引入签名文件
在项目目录/android/app下创建key文件夹,将生成的asign.jks文件Copy/Drag到该目录下。
3、在flutter项目目录android下创建文件key.properties,并添加以下内容:
storePassword=**
keyPassword=**
keyAlias=asign
storeFile=key/asign.jks
注:如果密码及keyAlias和签名文件中的一致时,可能会报如下错:
* What went wrong:
Execution failed for task ':app:lintVitalRelease'.
> Could not resolve all files for configuration ':app:lintClassPath'. 后面省略
4、在Gradle中配置签名文件
打开/android/app/build.gradle文件,添加以下内容:
def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
添加:
signingConfigs {
release {
keyAlias keystoreProperties["keyAlias"]
keyPassword keystoreProperties["storePassword"]
storeFile file(keystoreProperties["storeFile"])
storePassword keystoreProperties["keyPassword"]
}
}
并将buildTypes修改为:
buildTypes {
release {
// 其中release为signingConfigs中的release,可修改。
signingConfig signingConfigs.release
}
}
将lintOptions修改为:
lintOptions {
disable 'InvalidPackage' //系统已默认配置
checkReleaseBuilds false
abortOnError false
}
5、在Android Studio项目下的终端(也可以先cd到当前目录,然后在系统的终端中执行)中,执行打包命令:
flutter build apk
打包好的apk位于/build/app/outputs目录中。