为数十亿用户降低数据成本

某些国家/地区的数据流量套餐支出占普通用户月收入的 10% 以上。这意味着,最大限度缩减应用的下载大小并让用户控制应用使用数据的方式,可为许多用户带来极大的实惠。最大限度缩减下载大小还有助于节省内部存储空间,而这对某些设备而言是稀缺资源。

下文介绍的一些策略有助于优化您的应用通过网络以及在内部存储空间中使用的数据量。

缩减应用大小

就网络数据和内部存储空间而言,缩减应用大小是帮助用户减少数据消耗量的一种基本方式。该部分介绍几种缩减应用大小的方式。

缩减 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=trueshrinkResources=true,在构建时实现资源缩减,这样做可以自动从您的 APK 中移除未使用的资源。
  • 使用 Google Play 服务时,您应该有选择地只在 APK 中加入必要的 API。
  • 如需了解有关缩减 APK 代码大小的详细信息,请参阅有关如何避免依赖注入框架的 Android 培训。

允许将应用移至外部 (SD) 存储空间

  • 低成本设备自带的内置存储空间通常很小。用户可通过 SD 卡扩展存储空间;不过,应用需要明确声明其支持安装至外部存储,用户方可移动数据。
  • 您可利用您的 AndroidManifest.xml 中的 android:installLocation 标记,允许将您的应用安装至外部存储空间。如需了解有关允许将您的应用移至外部存储空间的详细信息,请参阅有关应用安装位置的 Android 指南。

降低应用安装后的磁盘占用率

  • 让应用的磁盘占用率保持较低水平,意味着在设备的可用空间不足时,用户卸载应用的可能性较小。务必规定缓存的界限,如此可防止应用的磁盘占用率无限增长。请务必将您的缓存数据存放在 getCacheDir(),系统可以根据需要删除存放在此处的文件,这样它们就不会显示为应用专用存储内容。

提供可配置的网络使用

Android 平台提供多种方式,使用户能够控制应用对网络的使用,从而根据自己的需求优化此配置。例如,当用户首次使用您的应用时,应用可以引导用户完成各种与网络相关的设置。您还可以在应用外部提供网络首选项屏幕。

针对用户的网络选择提供加入体验

  • 即便对数据的要求很高,允许用户降低数据使用量的应用仍大受欢迎。如果您应用的带宽占用量相当大(例如,视频流式播放应用),可以为用户提供加入体验来配置网络使用。例如,您可以允许用户在使用蜂窝网络时强制播放比特率较低的视频流。
  • 其他供用户控制数据同步、预取和网络使用行为(例如,只在使用 Wi-Fi 网络时预取所有已加星标的新闻类别)的设置也有助于用户根据自身需求来定制应用的行为。
  • 如需了解有关管理网络使用的详细信息,请参阅有关管理网络使用的 Android 培训。

提供网络首选项屏幕

  • 您可以借助于网络首选项屏幕,从应用以外导航至应用的网络设置。您可以从系统设置屏幕或系统流量消耗屏幕调用该屏幕。
  • 要提供用户可在应用内以及从系统设置访问的网络首选项屏幕,请在您的应用中加入一个支持 ACTION_MANAGE_NETWORK_USAGE 操作的 Activity。
  • 如需了解有关添加网络首选项屏幕的详细信息,请参阅有关实现首选项 Activity 的 Android 培训。