减小应用大小

较小的应用大小与下载成功率直接相关,尤其是在网络设备连接或网络速度较慢的新兴市场。这会导致应用使用率下降,进而降低您的受众范围和影响力。但是,有多种方法可以帮助减小应用大小。

最佳实践

将应用上传为 Android 应用捆绑包

在发布到 Google Play 时获得立即应用大小节省的最简单方法是将应用上传为 Android 应用捆绑包,这是一种新的发布格式,包含所有应用的已编译代码和资源,并将 APK 生成和签名延迟到 Google Play。

减小运行时代码大小

检查应用在运行时不使用的代码,例如任何大型类或自动生成的代码。像 R8 这样的代码优化器可以帮助优化和缩减代码大小,但它们无法处理由运行时常量保护的代码。将检查标志替换为编译时常量,以便充分利用各种优化工具。您可以在 Gradle 配置文件中启用代码和资源缩减

android {
    buildTypes {
        getByName("release") {
            isMinifyEnabled = true
            isShrinkResources = true
        }
    }
}

删除不必要的布局

将具有少量 UI 更改的未使用布局合并,并删除任何不必要的布局以减小整体应用代码大小。此外,您可以在可能的情况下动态渲染布局和视图。这使您可以避免绘制静态模板,并应用备用布局,而无需技术开销。

重新评估不常用的功能

通过禁用每日活跃用户 (DAU) 指标较低的功能,专门针对 Android (Go 版) 进行优化。例如,删除复杂的动画、大型 GIF 文件或任何其他对应用成功并不必要的审美添加。

使用动态交付

Play 功能交付 利用应用捆绑包的高级功能,允许有条件地交付应用的某些功能,或按需下载。您可以将功能模块用于自定义交付。功能模块的一个独特优势是能够自定义应用不同功能在运行 Android 5.0(API 级别 21)或更高版本的设备上的下载方式和时间。

减小可翻译字符串大小

您可以使用 Android Gradle resConfigs 属性删除应用不需要的备用资源文件。如果您使用包含语言资源的库(例如 AppCompat 或 Google Play 服务),那么您的应用将包含所有已翻译的库消息语言字符串,无论应用是否翻译。如果您只想保留应用正式支持的语言,可以使用 resConfig 属性指定这些语言。将删除未指定的语言的任何资源。

要将语言资源限制为仅英文和法文,可以编辑 defaultConfig,如下所示


android {
    defaultConfig {
        ...
        resConfigs "en", "fr"
    }
}

使用选择性翻译

如果给定的字符串在应用的 UI 中不可见,则无需翻译它。用于调试、异常消息或 URL 的字符串应是代码中的字符串字面量,而不是资源。

例如,不要费心翻译 URL。

<string name="car_frx_device_incompatible_sol_message">
  This device doesn\'t support Android Auto.\n
  &lt;a href="https://support.google.com/androidauto/answer/6395843"&gt;Learn more&lt;/a&gt;
</string>

您可能认识 &lt;&gt,因为它们是 <> 的转义字符。它们在这里是必需的,因为如果您要在 <string> 标签内放置 <a> 标签,则 Android 资源编译器会将其删除,因为它无法识别该标签。但是,这意味着您将 HTML 标签和 URL 翻译成 78 种语言。相反,您可以删除 HTML

<string name="car_frx_device_incompatible_sol_message">
         This device doesn\'t support Android Auto.
</string>

将本机二进制文件与常见依赖项合并

如果您的应用具有具有相同基础依赖项的不同 Java 本机接口 (JNI) 实现,那么各种二进制文件将使用冗余组件来增加 APK 大小。您可以将多个 JNI 二进制文件合并到一个 JNI 二进制文件,同时保持 Java 和 JNI 文件分离。这可以大幅减小 APK 大小。