降低数十亿用户的网络数据成本

在一些国家/地区,数据套餐的费用可能高达典型用户月收入的 10%。这意味着,最大程度地减少应用的下载大小并让用户控制应用如何使用数据,可以为许多用户带来巨大而切实的益处。最小化下载大小还有助于节省内部存储空间,这在某些设备上是稀缺资源。

在这里,您可以找到一些策略,以帮助优化应用使用的数据量,包括网络数据和内部存储数据。

减小应用大小

减少应用大小是帮助用户减少数据消耗(网络数据和内部存储数据)的基本方法之一。本部分介绍了减少应用大小的几种方法。

减少 APK 图形资产大小

  • 图形资产通常是 APK 大小最大的因素。优化它们可以缩小下载量,从而加快用户的安装速度。
  • 对于图标等图形资产,请使用可缩放矢量图形 (SVG) 格式。与位图图形相比,SVG 图像的大小非常小,并且可以在运行时呈现为任何分辨率。 Android 支持库 为矢量资源提供了一个向后兼容的实现,适用于 Android 2.1(API 级别 7)。您可以通过 这篇 Medium 博文 开始使用矢量。
  • 对于照片等非矢量图像,请使用 WebP 来减少图像加载时间并节省网络带宽。WebP 经过验证,其文件大小比 PNG 和 JPG 对等文件更小,并且具有至少相同的图像质量。即使在有损设置下,WebP 也可以生成与原始图像几乎相同的图像。Android 自 Android 4.0(API 级别 14:冰淇淋三明治)起就包含了有损 WebP 支持,并且自 Android 4.2(API 级别 17:果冻豆)起就支持无损透明 WebP。
  • 如果您在多个密度中有很多大型图像,请考虑使用 多个 APK 支持 按密度拆分 APK。这将生成针对特定密度构建的目标,这意味着低密度设备的用户无需承担下载未使用的、高密度资产的负担。
  • 有关减少 APK 大小的更多信息,请参阅 减少 APK 大小压缩代码和资源。此外,您可以在以下 Medium 博文系列 中找到有关减少 APK 大小的详细指南。

减少代码大小

  • Android 项目中的每个库都会向 APK 添加可能未使用的代码。在使用外部库时要格外小心,因为并非所有库都设计用于移动应用。确保您的应用使用的库已针对移动用途进行了优化。
  • 考虑使用 ProGuard 等工具优化编译后的代码。ProGuard 会识别未使用的代码并将其从 APK 中移除。此外,通过在 build.gradle 中设置 minifyEnabled=trueshrinkResources=true,在构建时 启用资源压缩——这会自动从 APK 中移除未使用的资源。
  • 使用 Google Play 服务时,您应该 选择性地将仅必要的 API 包含到 APK 中。
  • 有关减少 APK 中代码大小的更多信息,请参阅 Android 培训,了解如何 避免依赖注入框架

允许将应用移动到外部 (SD) 存储

  • 低成本设备通常自带的设备存储空间很少。用户可以使用 SD 卡扩展存储空间;但是,应用需要明确声明它们支持安装到外部存储中,然后用户才能移动它们。
  • 使用 AndroidManifest.xml 中的 android:installLocation 标志,允许您的应用安装到外部存储中。有关启用应用移动到外部存储的更多信息,请参阅 Android 指南中的 应用安装位置

减少安装后应用磁盘使用量

  • 保持应用的磁盘使用量较低,意味着当设备空间不足时,用户不太可能卸载您的应用。务必对缓存应用边界——这可以防止应用的磁盘使用量无限增长。确保将缓存数据放在 getCacheDir() 中——系统可以根据需要删除此处放置的文件,因此它们不会显示为已提交给应用的存储空间。

提供可配置的网络使用

Android 平台包含多种方法,您可以通过这些方法让用户控制应用的网络使用情况,并根据其自身需求进行优化。例如,在首次使用时,您的应用可以引导用户完成各种与网络相关的设置。您还可以从应用外部提供网络偏好设置屏幕。

为用户网络选择提供入门体验

  • 即使应用本身数据需求量很大,允许用户减少数据用量的应用也广受欢迎。如果您的应用使用大量带宽(例如,视频流应用),您可以为用户提供一个配置网络用量的引导体验。例如,您可以允许用户在蜂窝网络上强制使用更低比特率的视频流。
  • 提供其他设置供用户控制数据同步、预取和网络使用行为(例如,仅在 Wi-Fi 网络上预取所有收藏的新闻类别),也有助于用户根据自己的需求定制应用的行为。
  • 有关管理网络用量的更多信息,请参阅 Android 培训中的管理网络使用

提供网络偏好设置屏幕

  • 您可以通过网络偏好设置屏幕从应用外部导航到应用的网络设置。您可以从系统设置屏幕或系统数据使用屏幕调用此屏幕。
  • 要提供一个用户可以从应用内部以及系统设置中访问的网络偏好设置屏幕,请在您的应用中包含一个支持ACTION_MANAGE_NETWORK_USAGE操作的活动。
  • 有关添加网络偏好设置屏幕的更多信息,请参阅 Android 培训中的实现偏好设置活动

其他资源

要了解有关此主题的更多信息,请查看以下其他资源

博文