apk签名

本文详细介绍了如何在Android开发中进行APK的字节对齐,包括使用zipalign工具处理、删除META-INF文件、验证对齐状态以及后续的二次签名过程,最后提到了爱加密的重签名工具作为便捷方案。

字节对齐

    字节对齐的好处是帮助操作系统更高效率的根据请求索引资源,降低内存消耗。
    Android SDK自带字节对齐工具zipalign,二次签名前,最好先进行字节对齐操作(一般为4字节对齐)。虽然Android Studio打包的apk是默认经过字节对齐的,但是由于经历过应用加固步骤,不能保证该应用中的数据还处于对齐状态,以防万一,再进行一次字节对齐操作。

第一步

要进行字节对齐,首先修改刚刚加固了的apk文件,把它的的后缀名为 .zip(其它压缩格式也可以,主要是为了用压缩软件打开该文件),修改完成后打开该文件,删除下图中红框选中的“META-INF”文件夹(该文件夹经过应用加固后,签名信息已经被删了,多了一些杂七杂八的文件,没什么用。如果不删除该文件夹,后续二次签名就无法成功);
在这里插入图片描述

 


删除成功后,将该文件的后缀名重新改为 .apk;
第二步

将该apk文件复制到zipalign工具所在目录
该工具位于sdk\build-tools\build版本目录下
一般选择你项目中使用到的版本的目录即可
我这边用的是30.0.3

上图所示,红框中的zipalign.exe即为字节对齐工具,ziptest.apk就是需要对齐的apk文件
第三步

在当前目录的地址栏中输入cmd,回车
进入到命令提示窗口
输入zipalign.exe -v -p 4 input.apk output.apk
(命令中的input.apk为需要对齐的apk文件名,output.apk为对齐完成后输出的apk文件名)

中间省略一大段运行中输出的代码…

如上图所示,运行结束,出现红框中的代码,表示字节对齐成功,同时可以在目录中看到多了个字节对齐成功后的apk文件,如下图所示:

这样,对齐就完成了
我们也可以通过命令验证下apk是否对齐
还是把要验证是否对齐的apk放到这个目录下,执行命令:

zipalign -c -v 4 apk名字

    1

比如验证刚刚没有对齐的ziptest.apk

zipalign -c -v 4 ziptest.apk

    1

输出结果为succesful就是代表对齐
FAILED就代表没有对齐
得到结果如下:

二次签名

完成了字节对齐,就要对apk重新进行签名了
签名工具SDK也是自带的,apksigner。该工具位于字节对齐工具同级目录lib的下一级,
如下图所示:

接下来要做的就是把我们对齐的apk和签名文件jks放入目录下
接着,在该路径下打开cmd窗口,输入命令:

1、java -jar apksigner.jar sign --ks key.jks --ks-key-alias releasekey output.apk

key.jks为签名文件,releasekey为签名文件的别名,output.apk为上图红框2所示的apk文件。
例如下图所示:

命令中的签名文件别名由于隐私原因,就隐藏了,大家替换成自己签名文件的别名即可。
如果命令行输入没有任何问题,会在下方显示输入Keystore密码的指令,如上图最后一行所示Keystore password for signer #1: (这里需要注意:输入密码的时候命令提示窗口是不会有任何字符显示的,估计是为了隐私安全,输入完成后直接Enter就行了)。
签名成功,在命令提示窗口不会有任何提示;反之则有错误提示。只需查看目录中的apk文件修改日期是否改变,例如下图所示:

时间较之前最初的,变成签名命令执行成功后的时间。想要确保签名成功,也可输入下述命令查看:

1、java -jar apksigner.jar verify -v output.apk

其中的output.apk为签名文件的文件名,签名成功结果如下图所示:

至此,从加固到二次签名整一个流程就结束了。
顺便推荐一个,爱加密的重签名工具,实现原理其实就是上面的。
这个工具可以避免手动输入上面哪些命令

在 Android 应用发布流程中,APK 签名是关键的一环,用于验证应用作者身份并确保应用数据的完整性和一致性。以下是 APK 签名的主要方法和流程: ### APK 签名的基本概念 APK 签名通过使用密钥库(keystore)文件对 APK 进行数字签名,通常采用 Java 的 `keytool` 和 `jarsigner` 工具,或者使用 Android 提供的 `apksigner` 工具进行签名操作。签名过程生成的签名信息被嵌入到 APK 文件的 `META-INF` 目录中,包括签名证书和加密摘要。 ### 使用密钥库(Keystore)创建签名 开发者首先需要生成一个密钥库文件(通常为 `.jks` 扩展名),其中包含私钥和公钥证书。使用 `keytool` 命令可以生成密钥库: ```bash keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias ``` 该命令会提示用户输入密钥库密码、密钥密码以及证书相关信息,最终生成一个包含密钥的 `.jks` 文件[^2]。 ### 使用 `jarsigner` 进行签名 在生成未签名APK 文件后(通常通过 Android Studio 或构建工具生成),可以使用 `jarsigner` 工具进行签名: ```bash jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.jks app-release-unsigned.apk my-alias ``` 此命令将使用指定的密钥库和别名对 APK 文件进行签名签名完成后,可以使用 `zipalign` 工具优化 APK 文件以提高运行效率: ```bash zipalign -v 4 app-release-unsigned.apk app-release.apk ``` ### 使用 `apksigner` 进行签名 `apksigner` 是 Android 提供的专用签名工具,支持 V1 和 V2 签名方案,适用于 Android 7.0(API 24)及以上版本。其使用方式如下: ```bash apksigner sign --ks my-release-key.jks --out app-release-signed.apk app-release-unsigned.apk ``` 该命令会使用指定的密钥库对 APK 文件进行签名,并输出已签名APK 文件。同时,`apksigner` 还支持多签名方案,可以确保 APK 在不同设备上兼容。 ### APK 签名验证 签名完成后,可以通过以下命令验证 APK 是否已正确签名: ```bash apksigner verify app-release-signed.apk ``` 该命令将输出签名信息,包括签名方案、证书指纹等,确保 APK 文件的完整性和签名有效性[^3]。 ### 签名流程总结 1. **生成密钥库**:使用 `keytool` 创建 `.jks` 文件。 2. **编译未签名 APK**:通过 Android 构建工具生成未签名APK 文件。 3. **签名 APK**:使用 `jarsigner` 或 `apksigner` 对 APK 文件进行签名4. **优化 APK**:使用 `zipalign` 工具优化 APK 文件。 5. **验证签名**:使用 `apksigner verify` 命令确保签名有效。 在整个签名流程中,确保密钥库文件的安全性至关重要,一旦密钥丢失,将无法更新已发布的应用。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值