有时候用第三方加固平台加固以后会让我们重新签名。还有就是上应用市场的时候,如果以前该应用已经在市场上上传过了,由于后面业务原因换了开发者账号再去上传就会提示我们去认领一个没有签名的包(unsign.apk),然后去签名上传进行MD5签名验证,如下图
- 看到上面的提示不要慌,不就是加个签名么,apksigner就是SDK自带的签名工具,处于
F:\android-sdk\build-tools\xxx
目录下
- 将上面的路径配置到系统环境变量path中,打开cmd,切换到unsign.apk目录下,建议.jks或.keystore文件和unsign.apk处于同一目录
- 然后输入以下指令回车,输入密码
apksigner sign --ks android.jks --ks-key-alias android --out signed.apk unsigned.apk
1、--ks 你的.jks文件路劲
2、--ks-key-alias 你的签名文件的别名
3、--out 输出签名后的目标路径
4、unsigned.apk 未签名的原始apk文件路径
放在同一个目录下就是为了避免路径过长,书写错误的问题
- 生成了带签名的apk
- 其实从文件的大小我们就可以看到有变化,但是还得验证是否签名成功,用以下指令
apksigner verify --verbose signed.apk
- 签名成功如图
- 没有签名如下提示
注意报错
- Caused by: java.io.IOException: Invalid keystore format
- ERROR: No suitable Java found. In order to properly use the Android Developer Tools, …
上面两个报错记得重新装一下jdk,配置一下环境变量
Exception in thread "main" com.android.apksig.apk.MinSdkVersionException: Failed to determine APK's minimum supported platform version. Use --min-sdk-version to override
at com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:336)
at com.android.apksigner.ApkSignerTool.main(ApkSignerTool.java:89)
Caused by: com.android.apksig.apk.MinSdkVersionException: Failed to determine APK's minimum supported Android platform version
at com.android.apksig.ApkSigner.getMinSdkVersionFromApk(ApkSigner.java:744)
at com.android.apksig.ApkSigner.sign(ApkSigner.java:253)
at com.android.apksig.ApkSigner.sign(ApkSigner.java:190)
at com.android.apksigner.ApkSignerTool.sign(ApkSignerTool.java:330)
... 1 more
Caused by: com.android.apksig.apk.ApkFormatException: Missing AndroidManifest.xml
at com.android.apksig.ApkSigner.getAndroidManifestFromApk(ApkSigner.java:725)
at com.android.apksig.ApkSigner.getMinSdkVersionFromApk(ApkSigner.java:742)
... 4 more
上面报错配置 --min-sdk-version ,如下
apksigner sign --min-sdk-version 21 --ks android.jks --ks-key-alias android --out signed.apk unsigned.apk