应用大小直接关系到下载成功与否,尤其是在网络连接质量不佳或网速慢的新兴市场。这可能会导致应用的使用率降低,进而缩小受众群体的范围和覆盖面。不过,您可以通过多种方式来缩减应用的大小。
最佳实践
以 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
<a href="https://support.google.com/androidauto/answer/6395843">Learn more</a>
</string>
您可能会认得 <
和 >
,它们是 <
和 >
的转义字符。此处之所以需要这些转义字符,是因为如果您将 <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 的大小。