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、获得apksigner.jar

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

最后,请特别注意!

使用的签名版本还跟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

如果本文对你有帮助就点个赞支持下吧~
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值