文章目录
- 一、apk 对齐操作
- 二、apk 对齐命令
- 三、apk 对齐操作代码示例
- 四、apk 对齐执行结果
一、apk 对齐操作
参考 【Android 安全】DEX 加密 ( DEX 加密使用到的相关工具 | dx 工具 | zipalign 对齐工具 | apksigner 签名工具 ) 中的 zipalign 对齐工具 ,
zipalign 工具位置 D: 01_Programs 01_Android 02_SdkSdkbuild-tools30.0.2zipalign.bat ;
zipalign 命令参考 :
代码语言:javascript复制zipalign 4 -v -f in.apk out.apk
zipalign 对齐工具参数设置 :
代码语言:javascript复制Usage: zipalign [-f] [-p] [-v] [-z] <align> infile.zip outfile.zip
zipalign -c [-p] [-v] <align> infile.zip
<align>: alignment in bytes, e.g. '4' provides 32-bit alignment
-c: check alignment only (does not modify file)
-f: overwrite existing outfile.zip
-p: memory page alignment for stored shared object files
-v: verbose output
-z: recompress using Zopfli
- <align> :
, 表示
位 对齐 ;
- -c : 只检查对齐 , 不修改文件 ;
- -f : 如果输出文件已经存在 , 覆盖该文件 ;
- -v : 输出相关信息
- -z : 使用 Zopfli 重新压缩文件 ;
一般使用 -f 参数配置 ;
注意上述参数的使用顺序 , 必须按照 -f -v <align> 顺序使用参数 ;
二、apk 对齐命令
完整绝对路径执行的命令 ( 仅做参考 ) :
D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/zipalign -f 4 D: 02_Project 02_Android_LearnDexEncryptionappbuildoutputsapkdebugapp-unsigned.apk D: 02_Project 02_Android_LearnDexEncryptionappbuildoutputsapkdebugapp-unsigned-aligned.apk
参数说明 :
D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/zipalign 是 zipalign.exe 工具的完整绝对路径 ;
-f 参数代表 , 如果存在输出文件 , 则覆盖该文件 ;
4 表示 32 位对齐 ;
D: 02_Project 02_Android_LearnDexEncryptionappbuildoutputsapkdebugapp-unsigned.apk 表示被对齐的 apk 文件 的 绝对路径 ;
D: 02_Project 02_Android_LearnDexEncryptionappbuildoutputsapkdebugapp-unsigned-aligned.apk 表示对齐后的输出文件的 绝对路径 ;
三、apk 对齐操作代码示例
对齐操作代码示例 :
代码语言:javascript复制 /*
4 . 对齐操作
*/
// 对齐操作的输出结果, 将 app-unsigned.apk 对齐, 对齐后的文件输出到 app-unsigned-aligned.apk 中
var unSignedAlignApk = File("app/build/outputs/apk/debug/app-unsigned-aligned.apk")
// 打印要执行的命令
println("cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/zipalign -f 4 ${unSignedApk.absolutePath} ${unSignedAlignApk.absolutePath}")
/*
将 app-unsigned.apk 对齐
使用 zipalign 工具命令
注意 : Windows 命令行命令之前需要加上 "cmd /c " 信息 , Linux 与 MAC 命令行不用添加
*/
process = Runtime.getRuntime().exec("cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/zipalign -f 4 ${unSignedApk.absolutePath} ${unSignedAlignApk.absolutePath}")
// 等待上述命令执行完毕
process.waitFor()
// 执行结果提示
if(process.exitValue() == 0){
println("对齐操作 执行成功");
} else {
println("对齐操作 执行失败");
}
四、apk 对齐执行结果
执行结果 : 红色矩形框就是对齐后生成的 app-unsigned-aligned.apk 文件 ;
命令行输出 :
代码语言:javascript复制cmd /c D:/001_Programs/001_Android/002_Sdk/Sdk/build-tools/30.0.2/zipalign -f 4 D: 02_Project 02_Android_LearnDexEncryptionappbuildoutputsapkdebugapp-unsigned.apk D: 02_Project 02_Android_LearnDexEncryptionappbuildoutputsapkdebugapp-unsigned-aligned.apk
对齐操作 执行成功