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 srcApkPath=%1
echo %srcApkPath%| findstr "_unsign.apk" >nul && (
set newAppName=%srcApkPath:~0,-11%
) || echo %srcApkPath%| findstr ".apk" >nul &&(
set newAppName=%srcApkPath:~0,-4%
)||(
set newAppName=%srcApkPath%
)
set keystorePath=%~dp0/xxx.keystore
set storepass=xxx2023
set keyAlias=xxx2023
set keypass=xxx2023
set 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 %1
java -jar %~dp0/libs/apksigner.jar sign --ks %keystorePath% --ks-key-alias %keyAlias% --ks-pass pass:%keypass% --v4-signing-enabled false -out %newAppName% %srcApkPath%
del %srcApkPath%
@echo "------------------sign apk complete--------------------"
@pause
将上面代码复制保存为.bat文件,将未签名的apk文件拖到此bat上面即可;文章来源:https://www.toymoban.com/news/detail-718863.html
参考连接:
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://www.toymoban.com/news/detail-718863.html
到了这里,关于关于使用Android自带的apksigner进行进行签名的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!