了解Android Studio 2.2中的APK打包

原标题:Understanding APK packaging in Android Studio 2.2
链接:https://android-developers.googleblog.com/2016/11/understanding-apk-packaging-in-android-studio-2-2.html
作者:Wojtek Kaliciński (Android开发者倡导者)
翻译:arjinmc

Android Studio 2.2最近推出了许多新的和改进的功能。有些更改很容易忽略,因为它们是在Android Gradle插件的引擎下发生的,例如改写新的集成APK打包和签名步骤。

APK签名方案v2

随着Android 7.0 Nougat中新的APK签名方案v2的推出,我们决定重写如何在Android Gradle插件中组装APK。你可以阅读有关v2签名的文档低级技术细节的所有信息,但是下面是一个快速的tl; dr作为Android应用程序开发者需要的信息摘要:

  • 用于验证其完整性的APK的加密签名现在位于ZIP中央目录之前。
  • 签名是在整个APK文件的二进制内容上进行计算和验证的,而不是在v1中存档中每个文件的解压缩文件内容。
  • APK可以同时由v1和v2签名签名,因此它仍然与以前的Android版本兼容。

为什么要将这个变化引入Android如何验证APK?首先,为了增强这种新的签名格式的安全性和可扩展性,其次,为了提高性能 - 新签名花费的时间在设备上进行验证的时间要少得多(无需进行昂贵的解压缩),从而加快了应用的安装时间。

然而,这个新的签名方案的后果是APK的创建过程有一些新的限制。由于在v1中只有未经压缩的文件内容得到了验证,所以APK签名后可以进行很多修改 - 文件可以被移动或重新压缩。事实上,作为zipalign构建过程一部分的工具正是这样做的 - 它用于在正确的字节边界上对齐ZIP条目,以提高运行时性能。

由于v2签名会验证存档中的所有字节,而不是单个ZIP条目,zipalign因此签名后不再可以运行。这就是为什么压缩,对齐和签名现在发生在构建过程的一个整合步骤中。

如果你在构建过程中有任何涉及以任何方式篡改或后续处理APK文件的自定义任务,请确保将其禁用,否则你可能会使v2签名无效,从而使你的APK与Android 7.0及以上版本不兼容。

如果你选择手动进行签名和对齐(例如从命令行进行签名和对齐),我们在Android SDK中提供了一个名为的新工具apksigner,它提供v1和v2 APK签名和验证。请注意,如果你使用的是v2签名,则需要在运行zipalign之前运行apksigner。另外请记住,JDK中的工具jarsigner与Android v2签名不兼容,因此如果你想保留v2签名,则无法使用它重新签名APK。

如果你想在使用Android Gradle插件构建时禁用添加v1或v2签名,则可以将这些行添加到build.gradle中的signingConfig部分:

v1SigningEnabled false
v2SigningEnabled false

注意:在Android Gradle插件2.2中,这两种签名方案都是默认启用的。

发布构建更小的APK

我们借此机会重写封装器,对发布APK的大小进行优化,从而实现更快的下载速度,Play Store上更小的增量更新,以及更少的设备浪费空间。以下是我们所做的一些更改:

  • 存档中的文件现在进行排序以最小化APK构建之间的差异。
  • 所有文件时间戳和元数据都被清零。
  • 对所有文件并行检查级别6和级别9压缩,并且使用最优级别,即,如果L9在大小方面提供很少益处,则可以选择L6以获得更好的性能
  • 本机库在APK中未经压缩和页面对齐存储。这是为在Android 6.0 Marshmallow设置android:extractNativeLibs="false"提供了支持,并使应用程序在设备上占用更少的空间,并在Play商店中生成更小的更新。
  • 不使用Zopfli压缩来更好地支持Play商店更新算法。不建议使用Zopfli重新压缩APK。在你的项目中预先优化个人资源(如PNG文件)仍然很好,建议使用。
  • 这些更改有助于使你的发行版本尽可能小,以便用户即使在较慢的连接或功能较差的设备上也可以下载和更新您的应用程序。但是,调试版本呢?

调试建立安装速度

在开发应用程序时,要保持迭代周期的快速 - 在连接的设备或仿真器上更改代码,构建和部署。自Android Studio 2.0以来,我们一直在尽可能快地完成所有步骤。通过即时运行,我们现在只能在运行时更新已更改的代码和资源,而新的模拟器带来了多处理器支持和更快的ADB速度,从而实现更快的APK传输和安装。构建改进可以进一步缩短这个时间,在Android Studio 2.2中,我们引入了增量打包和并行压缩以实现调试构建。与其他功能一样,有选择性地打包资源以实现目标设备密度和ABI,这将使你的开发更快。

请注意:为免安装应用创建的APK文件或通过调用构建版本的文件不适用于在Play商店中分发!它们包含“免安装应用”的其他检测代码,并且除了启动构建时连接的设备配置以外,还缺少资源。请确保你只分发可以使用Android Studio生成签名APK命令或assembleRelease Gradle任务创建的APK版本。

results matching ""

    No results matching ""