关于使用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 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://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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值