在此处,您可以找到一些有助于优化应用数据使用量(包括网络数据和内部存储数据)的策略。
减小应用大小是帮助用户减少数据消耗(包括网络数据和内部存储数据)的基本方法之一。本部分介绍了几种减小应用大小的方法。
最佳实践
减小 APK 图形资源大小
图形资源通常是导致 APK 大小过大的主要因素。优化这些资源可以减小下载文件大小,从而加快用户的安装速度。
- 对于图标等图形资源,请使用可伸缩矢量图形 (SVG) 格式。与位图图形相比,SVG 图片体积很小,可以在运行时以任何分辨率进行渲染。Android 支持库为 Android 2.1 (API 级别 7) 提供了向后兼容的矢量资源实现。通过这篇 Medium 文章开始使用矢量图形。
- 对于非矢量图片(例如照片),请使用 WebP 来缩短图片加载时间并节省网络带宽。实践证明,WebP 文件大小比 PNG 和 JPG 文件要小,且至少具有相同的图片质量。即使采用有损设置,WebP 也可以生成与原图片几乎相同的图片。Android 从 Android 4.0 (API 级别 14: Ice Cream Sandwich) 开始支持有损 WebP,并从 Android 4.2 (API 级别 17: Jelly Bean) 开始支持无损透明 WebP。
- 如果您的应用中有大量适用于多种屏幕密度的较大图片,请考虑使用多 APK 支持按屏幕密度分割您的 APK。这样可以生成针对特定屏幕密度的版本,这意味着使用低密度设备的用户无需承担下载未使用的更高密度资源的负担。
- 如需详细了解如何减小 APK 大小,请参阅减小 APK 大小和精简代码和资源。此外,您还可以在这系列 Medium 文章中找到关于减小 APK 大小的详细指南。
- 减小代码大小
Android 项目中的每个库都可能为 APK 添加未使用的代码。使用外部库时要特别小心,因为并非所有库都专为移动应用设计。确保您的应用使用的库已针对移动设备使用进行了优化。
- 考虑使用 ProGuard 等工具优化编译后的代码。ProGuard 会识别未使用的代码并将其从 APK 中移除。此外,通过在
build.gradle
中设置minifyEnabled=true
和shrinkResources=true
来启用资源精简功能——这会自动从 APK 中移除未使用的资源。 - 使用 Google Play 服务时,您应该选择性地仅将必要的 API 包含到您的 APK 中。
- 如需详细了解如何减小 APK 中的代码大小,请参阅关于如何避免使用依赖注入框架的 Android 培训内容。
- 允许应用移动到外部 (SD) 存储
低成本设备通常自带的设备存储空间较少。用户可以使用 SD 卡扩展存储空间;但是,应用需要明确声明支持安装到外部存储,然后用户才能将其移动。
- 使用 AndroidManifest.xml 中的
android:installLocation
标记允许您的应用安装到外部存储。如需详细了解如何使您的应用可以移动到外部存储,请参阅关于应用安装位置的 Android 指南。 - 减少安装后应用占用的磁盘空间
保持应用占用的磁盘空间较低意味着当设备可用空间不足时,用户不太可能卸载您的应用。重要的是要限制缓存的大小,这可以防止应用占用的磁盘空间无限增长。请务必将缓存数据放在 getCacheDir()
中,系统可以在需要时删除此处放置的文件,因此它们不会显示为应用已占用的存储空间。
- 提供可配置的网络使用选项
Android 平台包含多种方式,可让用户控制应用的网络使用,从而针对他们的需求进行优化。例如,首次使用时,您的应用可以引导用户完成各种与网络相关的设置。您也可以从应用外部提供一个网络偏好设置屏幕。
为用户的网络选择提供引导体验
允许用户减少数据使用的应用很受欢迎,即使它们有大量数据需求。如果您的应用使用大量带宽(例如,视频流应用),您可以为用户提供一个引导体验来配置网络使用。例如,您可以允许用户在移动网络上强制使用较低比特率的视频流。
- 额外的设置,让用户控制数据同步、预提取和网络使用行为(例如,仅在 Wi-Fi 下预提取所有加星标的新闻类别),也有助于用户根据自己的需求调整应用的表现。
- 如需详细了解如何管理网络使用,请参阅关于管理网络使用的 Android 培训内容。
- 提供网络偏好设置屏幕
您可以通过网络偏好设置屏幕从应用外部导航到应用的网络设置。您可以从系统设置屏幕或系统数据使用屏幕调用此屏幕。
- 要提供一个用户可以在应用内以及从系统设置中访问的网络偏好设置屏幕,请在您的应用中包含一个支持
ACTION_MANAGE_NETWORK_USAGE
操作的 activity。 - 如需详细了解如何添加网络偏好设置屏幕,请参阅关于实现偏好设置 Activity 的 Android 培训内容。
- 其他资源
如需详细了解此主题,请查看以下其他资源
博客文章
通过费用透明度培养信任
- 此页面上的内容和代码示例受内容许可中描述的许可条款约束。Java 和 OpenJDK 是 Oracle 和/或其附属公司的商标或注册商标。