缩减应用大小

应用大小直接关系到下载成功与否,尤其是在网络连接质量不佳或网速慢的新兴市场。这可能会导致应用的使用率降低,进而缩小受众群体的范围和覆盖面。不过,您可以通过多种方式来缩减应用的大小。

最佳实践

以 Android App Bundle 格式上传应用

如需在发布到 Google Play 时立即缩减应用大小,最简单的方法就是将应用上传为 Android APP Bundle,这是一种全新的发布格式,其中包含应用的所有编译好的代码和资源,但 APK 生成及签名工作则交给 Google Play 来处理。

缩减运行时代码大小

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

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

移除不必要的布局

将未使用的布局与细微的界面更改合并,并移除所有不必要的布局,以缩减应用代码的整体大小。此外,您还可以尽可能地动态渲染布局和视图。这让您可以避免绘制静态模板,而且可以应用备用布局而不产生技术开销。

重新评估不常用的功能

通过停用日活跃用户数 (DAU) 指标较低的功能,针对 Android(Go 版本)进行优化。例如,移除复杂的动画、大型 GIF 文件或其他任何对于应用的成功所不必需的艺术添加功能。

使用 Dynamic Delivery

Play Feature Delivery 使用了 app bundle 的多种高级功能,让您可按条件分发或按需下载应用的某些功能。您可以使用功能模块实现自定义分发。功能模块的独特优势在于,能够自定义如何以及何时将应用的不同功能下载到搭载 Android 5.0(API 级别 21)或更高版本的设备上。

缩减可翻译字符串的大小

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

如需将语言资源设置为仅限英语和法语,您可以按照以下方式修改 defaultConfig


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

有选择地翻译

如果某个字符串在应用界面中不可见,则无需翻译该字符串。用于调试、异常消息或网址的字符串在代码中应该是字符串字面量,而不是资源。

例如,无需翻译网址。

<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,它们是 <> 的转义字符。此处之所以需要这些转义字符,是因为如果您将 <a> 标记放在 <string> 标记内,则 Android 资源编译器会因为无法识别该标记而将其丢弃。不过,这意味着您需要将 HTML 标记和网址翻译成 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 的大小。