美文网首页
APK重新签名或者更换APK签名版本

APK重新签名或者更换APK签名版本

作者: 寻水的鱼Chock | 来源:发表于2021-11-12 15:14 被阅读0次

    在某些特殊情况下,需要对已经生成的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

    相关文章

      网友评论

          本文标题:APK重新签名或者更换APK签名版本

          本文链接:https://www.haomeiwen.com/subject/dgqozltx.html