App签名
推荐先了解 Android中APK签名工具之jarsigner和apksigner详解,这篇是我看了众多介绍签名里边说的最清楚的 https://www.cnblogs.com/slysky/p/9780015.html
记录完成签名的步骤
生成release版的apk
//如果用cordova
cordova build --release android
//如果是flutter, 按照新要求,需要上传aab包
flutter build appbundle
将apk拷贝到build-tools/2x.x.x目录下4字节对齐优化
2. zipalign -v 4 android-release-unsigned.apk release-unsigned.apk
生成密钥库
Java 密钥库(.jks 或 .keystore)是用作证书和私钥的存储库的二进制文件
// -keyalg默认会使用DSA加密算法,谷歌要求用RSA,此处需要指定RSA -keyalg RSA
// -validity要求有效时间大于25年 -validity 36500 指定100年
// -keysize (推荐)4096,至少要为2048
3. keytool -genkeypair -keystore debug.keystore -alias release -keysize 4096 -keyalg RSA -validity 36500
按实际信息填写。
debug.keystore文件只用生成一次,后续App更新继续用上次生成的debug.keystore文件,妥善保存,否则重新生成可能会因为签名不一致,无法在Google Play更新
上一步生成的 debug.keystore文件拷贝到build-tools目录, 谷歌用apksigner,低版本的build-tools没有,28及以上才有,我的环境是 \build-tools\28.0.3
用apksigner签名apk
- apksigner sign --ks debug.keystore --ks-key-alias release release-unsigned.apk
//如果密钥库只有一个密钥对
apksigner sign --ks debug.keystore release-unsigned.apk
用Jarsigner签名abb
Google Play上架应用需要上传AAB格式,当加固过后需要对AAB格式文件进行签名
jarsigner -verbose -keystore 签名文件 -digestalg SHA-256 -sigalg SHA256withRSA -storepass 签名密码 -keypass 别名密码 aab文件 keystore中的别名 -tsa http://timestamp.digicert.com
例如: jarsigner -verbose -keystore debug.keystore -digestalg SHA-256 -sigalg SHA256withRSA -storepass linchr -keypass linchr app-release.aab release -tsa http://timestamp.digicert.com
加上参数 -digestalg SHA-256 -sigalg SHA256withRSA,才能被Google Play识别。
问题1
jarsigner 错误:
java.lang.IllegalArgumentException: key algorithm not compatible with signature algorithm
查看debug.keystore用的签名算法
keytool -list -v -keystore debug.keystore
问题2
jarsigner: 无法对 jar 进行签名: java.util.zip.ZipException: invalid entry compressed size (expected 7240 but got 7382 bytes)
解决方案: 说明待签的(aab)apk是已经签名过的,如果想重新签名的话可以把要重签名的aab(apk)后缀改成zip,打开后删除里面的META-INF目录,然后重新改成(aab)apk后缀。
成功签名
问题3
您的 Android App Bundle 所使用的上传证书的密钥强度太低
您的 Android App Bundle 所使用的上传证书的密钥强度太低。 上文提到了,解决方法是在上面步骤中生成密钥库使用-keysize 4096
参考官方文档https://support.google.com/googleplay/android-developer/answer/9842756?hl=en-GB&visit_id=637823029693292460-3874495408&rd=1