作者 / Dom Elliott, 产品经理, Google Play
由于其开放性,Android 在其前十年取得了显著的增长。有大量的设备可供选择,蓬勃发展的开发者生态系统提供了许多应用和游戏,为这些设备赋予了长久的生命力。作为开发者,您希望确保用户尽可能获得最佳体验,并确保您的应用尽可能在所有这些设备上运行。您还希望尽可能多的用户安装您的应用; 您也希望他们持续使用它; 并且您不希望他们因您无法控制的原因卸载您的应用。到目前为止,Android 应用的发布和分发方式在所有这些方面都有待改进。我想观察一下开发者面临的一些挑战,并告诉您 Google 正在采取哪些措施来提供帮助。
回首 Android 的第一个十年
十年来,在 Android 上发布应用的流程如下:
-
第 1 步 :在 IDE 中为您的应用编写代码,例如 Android Studio。
-
第 2 步 :当您准备好测试或发布应用时,您可以将其构建为 APK,也就是 Android 的应用格式。作为构建 APK 的一部分,您可以使用应用签名密钥对其进行数字签名。为应用签名意味着安全地为其添加唯一证书。这种机制可以确保您是唯一可以继续更新此应用的人。这种机制是这么工作的:在更新应用之前,Android 始终会检查更新的证书是否与设备上应用的证书相匹配。稍后我会详细阐明为什么我要讲这些。
-
第 3 步 :使用 Google Play Console 将已签名的 APK 上传到测试轨道。待测试和调整就绪后,将应用正式发布,并分发到世界各地。
-
第 4 步 :Google Play 会将已经被您签名的 APK (就是您上传的那个) 在安装时分发至每个用户的设备。
多年来,这种方法运作良好。实际上,人们每个月都会从 Google Play 安装超过 80 亿个应用!但是,正如您将看到的,这种模式为开发者带来了难以忽视的挑战。
难以忽视的 “ 大 ” 问题
挑战在于: 应用的体积越来越大 了。事实上,自 2012 年以来,应用体积平均增长了 5 倍。这很好理解: 您希望为应用添加炫酷功能和新内容,以确保用户留存/回归并保持业务增长。设备性能越来越好,您希望能把那些闪亮的新功能利用起来。设备生态系统变得更加多样化了,因此您决定复制应用中的代码和资源,使其在大屏幕和小屏幕上都能流畅运行,在不同种类的 CPU 上都能流畅运行,等等。
如果每个用户都拥有无限的存储空间、无限的数据流量和永远存在的快速连接,那么应用越来越大并没有什么问题。遗憾的是,事实并非如此 (当然我们希望有一天能够如此!)。通过查看下图,您可以看到 Google Play 上的应用大小与其安装转化率呈负相关关系。这意味着随着应用变大,其安装率会下降。出现这种情况有很多原因:许多用户的设备上没有足够的可用空间。用户可能在使用存储空间一般的入门级设备,即使对于那些拥有高端设备的用户而言,他们的照片、视频和其他媒体文件的品质也在逐渐提升,从而占据了越来越大的空间,设备上的可用空间正在逐渐紧缩。用户也不希望一边用着昂贵的流量套餐,一边等待大型应用去慢慢连接网络,在新兴市场尤其如此。
针对上述问题,开发者们能采用的解决方案很有限。您可以在单个版本中为每个设备配置构建多个 APK。但当您想要针对不同屏幕尺寸和 CPU 架构进行优化,同时针对 32 位和 64 位时,情况很快就会失控——您最终可能会为每个版本构建数百个 APK。这很痛苦,大多数开发者都不会这样做。许多人只是将所有内容都放在一个“胖胖的” APK 中,最终导致用户设备上存在着大量未使用过的内容。而且,即使您使用多重 APK,也无法针对语言进行优化。即使用户只需要一种或两种语言,您也必须在每个 APK 中包含针对每个设备的所有翻译字符串,这样会浪费更多空间。
因此,开发者的困境就显而易见了:增加应用的体积,但可能会导致较低的转换率和较高的卸载风险;使用多重 APK,会降低您的版本迭代效率并导致您疲惫不堪,您还可能会花费大量的时间权衡不同的功能之间的取舍,以避免增加应用体积。
“小” 而 “巧” 的解决方案来了
Google 不希望开发者面临这些困境,因此我们一直在努力改进。大致的想法是这样的:如果您将所需的所有内容上传到了 Google Play,让 Play Store 为每个用户和设备按需提供相应的内容。这很简单,不是吗?这一过程可以减少您支持 Android 多样化生态系统所需的工作量,并使用户手中的应用体积更小。正如您稍后将在本文中发现的那样,这个新方案还有助于改善用户获取过程:通过功能和更新,即时发现、安装、吸引,以及保留用户。
更小的安装包
为实现这一愿景,Google 于今年早些时候推出了一款 新的应用发布格式 Android App Bundle 。以下是它的详细工作原理:
- 第 1 步 :您可以在 IDE (如 Android Studio) 或 Unity 等游戏引擎中编写应用的所有代码。
- 第 2 步 :现在,当您准备好测试或发布应用时,您可以将其构建为 Android App Bundle,也就是新的 Android 应用发布格式。您仍然要对应用进行签名,以便 Google Play 验证您的身份。
- 第 3 步 :如果您还没有签名,则可以选择通过 Google Play 进行应用签名。如果您要发布新应用,则可以在上传应用时通过一键式过程执行此操作。当您决定这样去做时,Play 会将您用于签署应用束的第一个密钥指定为上传密钥。它仅用于安全识别目的,如果您丢失了它,可以与 Google 联系,验证您的身份并重置它。对于现有应用,您需要访问 Play Console 中的应用签名页面,并将您的应用签名密钥安全地转移到 Google Play。您为什么需要这样做?继续查看第4步就能发现答案。
- 第 4 步 :当您将应用束上传到 Google Play 时,Play 会对其进行处理,并生成使用应用签名密钥签名的分拆 APK,以支持各种设备配置和语言。分拆 APK 是 Android Lollipop 中引入的 Android 平台功能。只要每个分拆 APK 都使用相同的密钥签名,Android 平台就会将它们视为一个应用。您可以将各个分拆 APK 视为一个完整 APK 的各个“部件”:为了运行应用,设备会将全体部件整合起来,视为单个应用。
- 第 5 步 :当用户安装该应用时, Play 会提供基础 APK (每台设备上都需要用到的代码),语言 APK (用于用户使用的语言),以及配置 APK (用于适配设备的屏幕大小和 CPU 架构)。这意味着设备可以在不浪费空间的情况下获得所需的功能。要让设备接受更新,必须使用与原始应用相同的应用签名密钥对每个版本的分拆 APK 进行签名。
- 第 6 步 :在您的应用安装在设备上后,Play 也会根据需要提供额外的分拆 APK,例如,当用户更改设备语言或是想要使用动态功能时。更具体的细节将在稍后详述。