在构建变体设置为“调试”模式的 android studio 中,我发现了 apk 的两个输出
应用程序调试.apk
应用程序调试未对齐的.apk
这些文件之间有什么区别?
简短的回答:
app-debug-unaligned.apk
= 未对齐的签名 APK
app-debug.apk
= 对齐的签名 APK(使用 zipalign 优化 RAM)
长答案
要了解差异,我们需要了解以下几点:
应用签名流程
生成私钥(keytool)
编译以获取未签名的 APK -> 未对齐的未签名 APK
使用私钥(jarsigner)在调试/发布模式下签署应用程序 -> 未对齐的签名 APK
对齐 APK (zipalign) -> 对齐签名的 APK
here 解释了整个签名过程。
为什么我们需要中间的 app-debug-unaligned.apk 呢?
根据 docs:
注意:zipalign 只能在 .apk 文件使用您的私钥签名后执行。如果您在签名之前执行 zipalign,则签名过程将撤消对齐。
有什么好处?压缩对齐?
优点是对齐的 APK 针对 RAM 使用进行了优化,因此它们将在设备中消耗更少的 RAM。从 docs:
zipalign 是一种存档对齐工具,可为 Android 应用程序 (.apk) 文件提供重要优化。 ....好处是减少了运行应用程序时消耗的 RAM 量。