做者 / Dom Elliott, 产品经理, Google Playandroid
因为其开放性,Android 在其前十年取得了显著的增加。有大量的设备可供选择,蓬勃发展的开发者生态系统提供了许多应用和游戏,为这些设备赋予了长久的生命力。做为开发者,您但愿确保用户尽量得到最佳体验,并确保您的应用尽量在全部这些设备上运行。您还但愿尽量多的用户安装您的应用; 您也但愿他们持续使用它; 而且您不但愿他们因您没法控制的缘由卸载您的应用。到目前为止,Android 应用的发布和分发方式在全部这些方面都有待改进。我想观察一下开发者面临的一些挑战,并告诉您 Google 正在采起哪些措施来提供帮助。web
十年来,在 Android 上发布应用的流程以下:安全
第 1 步:在 IDE 中为您的应用编写代码,例如 Android Studio。网络
第 2 步:当您准备好测试或发布应用时,您能够将其构建为 APK,也就是 Android 的应用格式。做为构建 APK 的一部分,您可使用应用签名密钥对其进行数字签名。为应用签名意味着安全地为其添加惟一证书。这种机制能够确保您是惟一能够继续更新此应用的人。这种机制是这么工做的:在更新应用以前,Android 始终会检查更新的证书是否与设备上应用的证书相匹配。稍后我会详细阐明为何我要讲这些。架构
第 3 步:使用 Google Play Console 将已签名的 APK 上传到测试轨道。待测试和调整就绪后,将应用正式发布,并分发到世界各地。app
第 4 步:Google Play 会将已经被您签名的 APK (就是您上传的那个) 在安装时分发至每一个用户的设备。ide
多年来,这种方法运做良好。实际上,人们每月都会从 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。如下是它的详细工做原理:
咱们切换到 App Bundle,并在一小时内就上传了咱们的第一个内部版本。 Swiggy ~使用 Apple Bundle 减小了 23% 的应用体积
成千上万的热门应用开发者正在使用 App Bundle 打包其应用。使用 Android App Bundle 的开发者的 APK 大小平均比以前采用的“完整 APK”小 3.5% (“完整 APK”是指一个 APK 包含了 Android App Bundle 支持的全部设备配置和语言所需的一切)。更重要的是,对于那些必须管理每一个版本的人来讲,新格式意味着您再也不须要使用多 APK 来进行设备配置。Google Play 会为您解决此问题,让您的生活轻松一点。Play Console 即将开始容许您上传大型 App Bundle,其对应的 APK 大小为500MB。在提高过尺寸上限后,咱们相信在大多数状况下您也不须要使用额外的扩展文件了。
如今咱们没必要使用多 APK 了,App Bundle 节省了咱们的时间。 redBus ~使用 App Bundle 减小了 22% 的应用体积
新分发模型和新发布格式的好处是, Google Play 能够在 APK 生成过程当中引入优化,从而节省您的时间和精力。刚刚公布的一个例子是:支持未压缩的本地代码库,这是 Android Marshmallow 中引入的一个不多使用的平台功能。使用 App Bundle 的开发者无需额外的工做便可得到此功能。
在 Android M 以前,您的应用中包含的任何本地代码库都必须从 APK 中解压缩。这意味着每一个设备上都安装了两个代码库副本:APK 中的压缩副本和未压缩的副本。这会致使空间浪费。从 Android M 开始,您能够直接以未压缩的状态从 APK 中读取代码库。Play 在下载过程当中对 APK 的压缩一般比压缩 APK 中的本地代码库更有效,所以总体下载体积也更小。为了让您能够从中受益而没必要担忧上传大小,Play Console 的大小限制正在发生变化,它们基于用户下载的压缩 APK 大小,而不是您上传到 Play Console 的应用大小。平均来说,仅此一项优化就足以将使用本地代码库的应用的文件下载量减小 8%,将设备上的安装大小减小 16%。只要切换到应用束,就能够享受到如此惊人的文件体积缩减!
20 多种语言的资源文件增长了咱们的应用体积,并显著拉低了咱们的访问安装转化率。咱们使用 Android App Bundle 后状况大为改观。 Riafy ~使用 Apple Bundle 减小了 37% 的应用体积
正如我所提到的,应用必须选择经过 Google Play 进行应用签名才能使用应用束。应用签名密钥是一种机制,它能够确保在安装应用后,更新始终来自同一个开发者。Google 没法经过此密钥得到额外的访问权限,也没法识别有关开发者的信息。它仅用于签署拆分 APK 以进行安装和更新。Google 很是重视安全性,Google 拥有一支工程师团队以及高级的基础架构,使用与 Google 用来保护自用应用密钥相同的安全密钥存储来保护开发者的密钥。事实上,对于大多数开发者来讲,选择进行应用签名而后使用上传密钥签署每一个版本比本身持有密钥更安全,由于密钥可能会丢失或暴露。若是您决定不采用这种机制,并丢失了您的应用签名密钥,您将没法更新您的应用,很遗憾,一旦发生这种状况咱们就没法提供任何帮助了。
动态功能
Android App Bundle 的另外一个重要创新是模块化设计。这意味着您能够向应用添加模块,其中包含可以按需加载的其余应用功能。这就是我以前提到的应用变大的一个重要缘由:功能的增加。如今,您能够添加更多功能,而无需在安装时增长应用的大小。使用动态功能也是在 Android 上动态加载代码的安全作法,由于动态功能模块的扫描和检查方式与 Google Play Protect 扫描和检查应用自己的方式相同。
即时发现
我已经讲过了 Android App Bundle 如何帮助您保持应用的小巧,并经过动态功能实现应用的高度配置化。Android App Bundle 还支持免安装应用 (Instant Apps)。Google Play Instant 容许用户在安装完整应用或游戏以前,经过 Play Store 中的“当即试用”按钮、广告和连接试用应用和游戏。Instant 如今安装在 13 亿台设备上,而且被证实是驱动应用发现和安装的极佳方法,从而争取到那些可能还没有安装应用的用户。Vimeo 是利用 Google Play Instant 取得成功的众多合做伙伴之一,他们的报告显示,15% 的新安装量都来自他们的试用功能。
这并不意味着每一个应用都很容易知足 10MB 的体积限制。使用动态功能模块逐步加载功能是大幅减小应用体积的众多方法之一。10MB 的大小限制仅适用于将启用了免安装功能的应用束推送到生产环境的时候,因此在此以前您能够在超出大小限制的状况下对其进行测试。若是您可以将基本模块和免安装入口模块进一步减小到 4MB 如下,则可激活更多免安装体验的曝光机会,例如 Google Search 以及经过电子邮件或社交媒体等渠道共享的任何 Web 连接。想建立支持免安装的或者正常安装的应用束的话,您也可使用 Android Studio 3.3 beta 版。
更快的更新速度
我想谈的最后一件事是,让用户手中的应用保持在最新状态。吸引和留住受众的最后一步是,确保他们拥有您全部的最新功能和最新补丁。虽然许多 Google Play 用户已经启用了自动更新功能,但许多用户还还没有启用,还有些用户没法频繁链接到高速的 Wi-Fi 链接并保持全部应用的正常更新。新的应用内更新 API (In-app Updates API) 可以让您检测什么时候有可用的更新,并集成可定制的在线更新流程,它的外观和感受就像是应用的一部分。检测到更新时,您能够经过提示通知用户当即更新,也能够按照您选择的方式进行提示,从而更灵活地通知用户进行更新。
Google Chrome 如今正在测试应用内更新API,咱们很快就会向更多开发者推出。它适用于任何应用,所以您能够在切换到应用束时使用它。若是您想要得到良好的更新率,最好向用户明确说明更新的好处,若是有可能的话,让他们在完成想作的事情后再进行更新,而不是在他们首次打开您的应用时就询问他们是否须要更新。当有人第一次打开您的应用时,他们必定是带有明确的使用目的的,这时的他们并不想等待应用更新。
咱们相信,这会让咱们的应用生态朝着更鲜活的方向发展。让咱们一块儿期待 Android 的下一个十年!祝你们开发路上顺利 & 成功!
点击这里了解 Android App Bundle 详情