较小的应用大小与下载成功率直接相关,尤其是在网络设备连接差或网络速度慢的新兴市场。这可能导致应用使用率降低,进而降低受众的范围和覆盖面。但是,有多种方法可以帮助减小应用的大小。
最佳实践
将应用上传为 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
<a href="https://support.google.com/androidauto/answer/6395843">Learn more</a>
</string>
您可能会识别出 <
和 >
,因为它们是 <
和 >
的转义字符。它们在这里是必需的,因为如果您要在 <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 大小。