减小应用大小

应用大小较小与下载成功率直接相关,尤其是在网络设备连接不佳或网络速度较低的新兴市场。这可能导致应用使用率降低,进而缩小受众的范围和覆盖面。不过,有多种方法可以帮助减小应用大小。

最佳实践

以上传 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 文件或任何其他对应用成功非必需的装饰性添加。

利用动态交付

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 Native Interface (JNI) 实现,但底层依赖项通用,则各种二进制文件会因冗余组件而增大 APK 大小。您可以将多个 JNI 二进制文件合并为一个 JNI 二进制文件,同时保持 Java 和 JNI 文件分离。这可以显著减小您的 APK 大小。