关于使用Android自带的apksigner进行进行签名
apksigner.jar是Android自带的 工具中的命令,放在SDK->build-tools工具中;
以往的使用 jarsigner、sign.jar的签名只支持V1签名;
android 7.0以前只支持V1签名;
apksigner.jar支持Android 7.0之后的V1、V2、V3、V4签名;
注意使用了V2签名之后,无法使用apk对齐方法,即zipalign命令;
zipalign -v 4 in.apk out.apk //4字节对齐优化zipalign -c -v 4 in.apk //检查APK是否对齐
所以:zipalign不能在V2签名后执行,只能在V2签名之前执行!!!
1.验证签名的命令:
java -jar apksigner.jar -v -print-certs xxx.apk
其中:
-v, --verbose 显示详情(显示是否使用V1和V2签名)
–print-certs 显示签名证书信息
2.签名:
java -jar apksigner.jar --ks debug.keystore --ks-key-alias debugKey xxx.apk然后输入密码即可获取到对应的v2签名的APK,他是在原APK基础上进行修改的;而keytool是新创建一个apk,对原APK并不影响;
其中:
--ks-key-alias 密钥别名,若密钥库有一个密钥对,则可省略,反之必选--v1-signing-enabled 是否开启V1签名,默认开启--v2-signing-enabled 是否开启V2签名,默认开启--v3-signing-enabled 是否开启V2签名,默认开启--v4-signing-enabled 是否开启V2签名,默认开启
其中如果不v4签名会生成一个.idsig文件,这个文件不用处理,可以直接删掉;
上面的命令需要用户输入密码操作,如想一步到位,可使用下面的命令,在命令行中直接携带密码:
//下面的your换成对应你们自己的即可;java -jar .\apksigner.jar sign --ks .\yourkeystore.keystore --ks-key-alias youralias --ks-pass pass:yourpassword [–out output.apk] .\unsign.apk
3.用pk8、pem密码的签名;(因为自动打包中有需要),可以使用另外一种签名;
java -jar apksigner.jar --key key.pk8 --cert cert.x509.pem [signer_options] Myapk.apk
其中【signer_options】则是上面提到的参数,因为有时候不想生成v4的临时文件,所以不使用V4签名;携带--v4-signing-enabled false
即可;
以下是我写的一个工具bat,仅供参考:
@echo off@echo "------------------sign apk start-----------------------"set curTime=%Date:~0,4%%Date:~5,2%%Date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%set class="lazy" data-srcApkPath=%1echo %class="lazy" data-srcApkPath%| findstr "_unsign.apk" >nul && ( set newAppName=%class="lazy" data-srcApkPath:~0,-11%) || echo %class="lazy" data-srcApkPath%| findstr ".apk" >nul &&( set newAppName=%class="lazy" data-srcApkPath:~0,-4%)||( set newAppName=%class="lazy" data-srcApkPath%)set keystorePath=%~dp0/xxx.keystoreset storepass=xxx2023set keyAlias=xxx2023set keypass=xxx2023set newAppName=%newAppName%_signed_%curTime%.apk@rem java -jar F:/local_package/walle/libs/apksigner.jar --key key.pk8 --cert cert.x509.pem --v4-signing-enabled false %1java -jar %~dp0/libs/apksigner.jar sign --ks %keystorePath% --ks-key-alias %keyAlias% --ks-pass pass:%keypass% --v4-signing-enabled false -out %newAppName% %class="lazy" data-srcApkPath%del %class="lazy" data-srcApkPath%@echo "------------------sign apk complete--------------------"@pause
将上面代码复制保存为.bat文件,将未签名的apk文件拖到此bat上面即可;
参考连接:
https://developer.android.google.cn/studio/command-line/apksigner?hl=zh-cn
https://blog.csdn.net/qq_42351033/article/details/122301020
https://www.cnblogs.com/slysky/p/9780015.html
https://blog.csdn.net/lxlmycsdnfree/article/details/80801719
来源地址:https://blog.csdn.net/qq_24032059/article/details/130320404
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341