返回

Android Studio APK 体积暴增的根源与对策

Android

Android Studio APK 体积膨胀:揭秘背后的原因

Gradle 的隐匿变动

近期,Android Studio 的更新让开发者们焦头烂额,应用程序的 APK 体积急剧膨胀。深入调查发现,罪魁祸首竟是 Gradle 构建系统的默认配置变动。在最新的 Gradle 版本中,<application> 标签中的 android:extractNativeLibs 属性默认值从 true 悄然改为 false

AndroidManifest.xml 的关键设置

这个不起眼的改动导致 Gradle 在构建过程中不会自动提取原生库。这意味着 APK 中包含了所有针对不同 CPU 架构编译的原生库,极大地增加了 APK 的体积。

一劳永逸的解决方案

解决这一问题的关键是手动在 <application> 标签中添加 android:extractNativeLibs="true"。这会指示 Gradle 在构建过程中提取原生库,减少 APK 中包含的库数量,从而显著缩小 APK 体积。

<manifest ...>
    <application
        ...
        android:extractNativeLibs="true">
        ...
    </application>
</manifest>

进一步优化 APK 体积

除了修复 android:extractNativeLibs 属性外,还有更多技巧可以优化 APK 体积:

  • 使用 APK 分析工具,如 APK Analyzer,找出并删除多余的资源文件。
  • 利用 ProGuard 或 R8 代码混淆器缩小应用程序代码。
  • 移除未使用的代码和资源。
  • 考虑使用 App Bundles 而不是 APK,它允许设备下载特定设备所需的代码和资源。

优化带来的好处

应用这些解决方案后,APK 体积将明显下降。对于典型应用程序,体积减少幅度可达 30%。这不仅节省了磁盘空间,还加快了应用程序的下载和安装速度。

常见问题解答

1. 为什么 Gradle 会默认更改 android:extractNativeLibs 属性?

Gradle 团队尚未公开解释这一更改的原因。但猜测认为,这可能是为了提高构建速度或减少 APK 中的重复文件。

2. 更改 android:extractNativeLibs 属性是否会影响应用程序功能?

不会。手动将 android:extractNativeLibs 设置为 true 只是指示 Gradle 提取原生库。它不会改变应用程序的行为或功能。

3. 我可以在 Gradle 中配置其他设置来减少 APK 体积吗?

是的。可以通过调整 splitsshrinkResources 等 Gradle 属性来进一步减少 APK 体积。有关详细信息,请参阅 Gradle 文档。

4. 我应该使用 App Bundles 还是 APK?

App Bundles 通常比 APK 体积更小,因为它允许设备下载特定设备所需的代码和资源。但是,App Bundles 需要 Android 5.0 或更高版本,这可能会限制其在旧设备上的使用。

5. 我可以减小原生库的体积吗?

可以。可以使用 NDK 工具链优化原生库,以减少其文件大小。

结论

Android Studio APK 体积膨胀的问题可以通过修复 android:extractNativeLibs 属性并应用其他优化技巧来解决。通过遵循本文介绍的方法,开发者可以显著减小 APK 体积,为用户提供更好的应用程序体验。