因为要适配android11版本,targetSdkVersion修改为 30后,进行加固apk,在android11上安装失败。
失败原因:加固apk后,v2签名没了,需要重新签v2.
我们可以使用Android SDK自带的apksigner.jar 对APK进行签名操作,apksigner.jar 存放在\Android\Sdk\build-tools\27.0.3\lib目录下。
cmd
编辑,打开指定目录
cd C:\Users\18745\AppData\Local\Android\Sdk\build-tools\27.0.3\lib
查看apk签名情况
这是安装失败的apk文件路径 C:\Users\18745\Desktop\DNP_3.3.96.2(6.1.8)_psigned.apk
java -jar apksigner.jar verify -v C:\Users\18745\Desktop\DNP_3.3.96.2(6.1.8)_psigned.apk
通过执行命令返回的结果可以看到V1与V2的签名情况
这是未签名的APK返回的的结果:
DOES NOT VERIFY
ERROR: Missing META-INF/MANIFEST.MF
这是v1签名的APK返回的的结果:
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): false
这是v1v2都签名的APK返回的的结果:
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
例子
java -jar apksigner.jar sign --ks [签名路径] --ks-key-alias [alias名称] --ks-pass pass:[密码] --key-pass pass:[密码] --out [签名后的新包路径] [待签名的包路径]
java -jar apksigner.jar sign --ks D:\ruanjian\AndroidPath\DeepiotPatrol\app\jks\deep.jks --ks-key-alias deep --ks-pass pass:123456 --key-pass pass:123456 --out C:\Users\18745\Desktop\DNP_3.3.96.2(6.1.8)_加固.apk C:\Users\18745\Desktop\DNP_3.3.96.2(6.1.8)_psigned.apk
生成签名后再次执行已确认v2签名是否成功
java -jar apksigner.jar verify -v C:\Users\18745\Desktop\DNP_3.3.96.2(6.1.8)_加固.apk
Verifies
Verified using v1 scheme (JAR signing): true
Verified using v2 scheme (APK Signature Scheme v2): true
新的apk可以安装在Android 11手机上了