APK重新签名或者更换APK签名版本
在某些特殊情况下,需要对已经⽣成的apk进⾏重新签名,或者对已经⽣成的apk更换签名版本(v1/v2/v3/v4)。如何实现呢? 可以通过命令⾏对已⽣成的apk进⾏处理。
ps: 已知当前(2021/10/30)vivo应⽤市场仅⽀持上传包含V1签名的APK(通常都是v1/v2混合签名或者仅v1签名)。但是如果编译设置的min-sdk-version⼤于等于26时,就会遇到问题了(正常Android Studio打包的apk不会包含V1签名->⽆法上传vivo应⽤市场。如果通过命令强制只签V1版本的签名,可以上传应⽤市场,应⽤也可以正常运⾏,但是新出的Android 11设备已⽆法正常安装 --不再⽀持v1签名。)希望vivo应⽤市场尽快升级吧~~~ 如果不幸真遇到这种问题怎么办呢? 尝试本⽂最后⼀条命令对apk签名进⾏强制V1版本签名试试吧,记得先签v2再强制进⾏v1签名。
1、获得a pk signer.ja r
apksigner.jar通常包含在Android SDK中可。路径⼀般是在Android SDK/build-tools/{SDK版本}/lib/apksigner.jar
不同的SDK版本中均有⼀个,取最新版本的就好了。
2、删除已有签名
使⽤压缩软件打开apk,删除包内/META-INF/⽂件夹及⽂件夹内所有⽂件,并重新压缩⽂件。
3、重新签名
准备好签名证书及相关密码和需要刚处理过得apk⽂件
⽰例:
开发者证书:cert.jks
别名: mg
密码: 123456
输⼊⽂件: app-release.apk
输出⽂件: app-release-out.apk
执⾏命令
java -jar apksigner.jar sign --ks cert.jks --ks-key-alias mg --v1-signing-enabled true --v2-signing-enabled true --out app-release-out.apk app-release.apk
接着输⼊证书保护密码及别名密码。
校验签名是否成功:
java -jar apksigner.jar verify --verbose --print-certs app-release-out.apk
可以从此命令的输出中看出当前⽣成的apk签名情况。
控制apk签名使⽤的版本(v1/v2/v3)
可以通过如下命令⾏参数进⾏控制
--v1-signing-enabled true
--v2-signing-enabled true
--v3-signing-enabled false
android获取真正的签名最后,请特别注意!
使⽤的签名版本还跟apk编译时使⽤的最低SDK版本有关, 即min-sdk-version的值。如果设置的值⼤于
等于26,即使添加--v1-signing-enabled true 也⽆法通过上述步骤签V1版本的签名--仅有V2签名(Android Studio也是)。
可以对最后⽣成的apk通过执⾏如下命令尝试:
java -jar apksigner.jar sign --ks cert.jks --ks-key-alias mg --min-sdk-version 21 --max-sdk-version 30 --v1-signing-enabled true --v2-signing-enabled false --v3-signing-enabled false --out app-release-out2.apk app-release-out.apk
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论