APK 加固、签名、对齐流程

1,401 阅读2分钟

APK 加固流程

打包APK

通过 ./gradlew assembleRelease 命令打包,此时的apk没有加固,不符合安全需要

登录腾讯云执行加固操作

cloud.tencent.com/

加固使用 腾讯云 -> 移动应用安全 -> 应用安全 加固方案,加固服务需要认证,自行选择适合自己的方式就行了

认证成功后,进入 应用加固 页面

点击去加固,点击 立即加固 ,上传应用

点击 确认加固, 在线加固需要几分钟,加固完成后有加固结果显示

此时加固就完成了,下载加固包就行了

重新签名

由于腾讯云应用安全需要将APK签名信息删除后才能加固,所以加固后的安装包是没有签名信息的,现在需要对加固包重新签名

1、使用 JDK 中的签名工具 jarsigner

运行 jarsigner,如果没有设置PATH环境变量,那可以从JDK安装路径下的bin目录中找到

image.png

签名命令

jarsigner -verbose -keystore keystore文件路径 -signedjar 签名后生成的apk路径 待签名的apk路径 alias别名

个人本地apk添加签名,签名文件 keystore 和 apk 都在同一个目录下, 签名后的 apk1.apk 也在本地

$ jarsigner -verbose -keystore .\my-key.keystore -signedjar .\myapp1.apk .\myapp.apk my-key-alias
输入密钥库的密码短语:
   正在添加: META-INF/MANIFEST.MF
   正在添加: META-INF/MY-KEY-A.SF
   正在添加: META-INF/MY-KEY-A.RSA
  正在签名: lib/arm64-v8a/libbetter.so
  正在签名: lib/arm64-v8a/libc++_shared.so

  ...

    正在签名: assets/0OO00l111l1l
  正在签名: tencent_stub
    [可信证书]

jar 已签名。

警告:
签名者证书为自签名证书。

这样就签名成功了。

备注:签名成功之后的apk在华为鸿蒙、Android8系统可以正常解析安装,在Android11解析安装包失败,需要使用zipalign工具进行对齐操作,再用apksigner重新签名

2、使用 JDK 中的zipalign工具对齐

zipalign和apksigner在Android SDK/build-tools/SDK版本/目录,需要先配置环境变量

控制面板->系统和安全->系统->高级系统设置->高级->环境变量->系统变量path

image.png

签名文件 keystore 和 apk 的目录下执行命令

对齐命令

zipalign -p -f -v 4 未对齐(jarsigner已签名)APK文件 生成的APK文件
zipalign -p -f -v 4 .\myapp1.apk .\myapp2.apk

验证对齐

zipalign -c -v 4 要验证的APK文件

image.png

对齐成功

3、使用 JDK 中的apksigner再次签名

apksigner sign --ks 密钥库文件 --ks-key-alias 密钥库别名 --ks-pass pass:密码 --v2-signing-enabled true -v --out 签名后的APK文件 要签名的(对齐后)APK文件
apksigner sign --ks .\my-release-key.keystore --ks-key-alias my-key-alias --ks-pass pass:cbf123456. --v2-signing-enabled true -v --out .\myapp3.apk .\myapp2.apk

出现Signed,签名成功