欢迎光临
专注android技术,聚焦行业精粹,我们一直在努力

关于 Android App Bundles

一个 Android App Bundle 是一种新的上传文件格式包含你应用中所有的编译后的代码和资源,但是将apk的生成和签名操作推迟给Google Play处理。

Google Play的新的app服务模式,称为动态交付,然后使用你的app bundle来根据每个用户的机器配置来生成并提供优化的APK,所以他们仅仅下载他们需要的代码和资源来运行你的app。你不再需要编译,签名和管理多个APK来支持不同的设备,用户会得到更小,更优化的下载。

此外,你可以添加动态功能模块到你的app工程中,并且将其包含到你的app bundle里面。这些模块包含一些你可以决定不再用户首次下载和安装你的app时提供的功能和资源。使用 Play Core Library,你的app可以稍后请求并下载这些模块作为动态的功能APK,并且,通过动态交付,Google Play 仅仅提供那个模块的代码和资源给这台设备。

如果你使用的是Android Studio,大多数app工程需要很少的努力来支持动态交付。你可以只要少许的点击就可以构建一个Android App Bundle。但是添加一个动态功能模块仍然处于测试阶段,需要多一点的努力,并且可能重构您的应用程序。

动态交付与拆分APK

一个动态交付的基本组成部分是一个在5.0或更高版本提供的APK拆分机制。拆分的APK和普通的APK非常相似–它们都包含编译后的DEX 字节码,resources资源,一个android manifest文件。但是,android平台可以将多个安装的拆分APK作为一个单独的app来处理。通过拆分APK,Google Play可以根据设备的配置将大型应用分成更小的,离散的包安装到用户的手机设备上。

以下描述了3种拆分APK,下面图1描述了这些APK对于一个简单和复杂APP的关系。

  • 基础APK:  这个APK包含了所有其他拆分APK都可以访问的代码和资源,并为APP提供了基础的能力。这个就是当用户下载您的应用时的第一个需要安装的APK。
  • 配置APK:  每一个这样的APK包含指定的屏幕分辨率,CPU架构,语言环境所需要的SO library,resources资源。这样的话,当一台设备下载了一个基础APK动态功能APK时,它只下载它需要的library和resources资源。对于大多数的app 工程,你不需要重构你的app来支持配置APK,Google Play会根据您的app bundle里面的代码和资源来为您生成这些APK。
  • 动态功能APK: 这些APK包含的代码和资源在您的应用首次安装时是不需要的,但是会稍后可能会下载和安装。

图1. 左边是一个简单的APP包含了一个基础APK(B)和一些配置APK(C). 右边是一个更复杂的包含了两个动态功能APK(D)和相应的一些配置APK(C)以供按需下载

请记住,当你使用Android App Bundle,Google Play 会为您构建和提供所有您APP的APK。并且,在运行Android 4.4(API leve 20)和更低版本的设备,Google Play自动提供了一个根据设备配置优化后的单独的APK。所以无论您是否打算去支持这些老版本的设备,动态交付为您和您的用户提供了一个灵活的服务机制。

大多数APP工程只需要少许的努力来支持Google Play的新服务机制。这是因为标准的app模块为您的基础APK提供了代码和资源,并且通过Android Studio,您只需要少量的点击就可以为您的APP创建一个动态功能

当您准备好为您的APP提供动态交付的服务支持时,阅读这篇文章为您的项目配置动态服务

 

构建,部署,上传Android App Bundles

当您完成配置您的APP支持动态交付后,您需要构建一个签名的Android App Bundle才能将您的APP上传到Google Play。

App Bundle和一个APK是不同的,因为您无法将它部署到一台设备上。相反,它是一种新的上传格式,其中包含所有应用程序的编译代码和资源,并将其存储在单个构建工件中。所以,当您上传完您的签名app bundle之后,Google Play拥有构建和签名您应用APK所需要的一切,并通过动态交付将这些APK提供给用户。

如果您使用的是Android Studio,您可以通过简单的几步点击来构建一个签名的App Bundle。然后只需将您的App Bundle上传到Play Console控制台,即可使用动态交付测试或发布您的应用。学习更多关于Android App Bundle格式,请阅读构建,部署和上传Android App Bundles

使用bundletool测试您的app bundle

当您构建完成您的Android App Bundle,您需要测试Google Play如何使用它来生成APK,以及这些APK在部署到设备时的行为方式。

您可以在本地使用bundletool来完成这些测试 ——Gradle命令行工具,Android Studio和Google Play用于构建一个Android App Bundle或者将一个App Bundle转换为可以部署到设备的APK。这个工具对于您的构建服务器支持包含 App Bundle也非常有用。

学习更多关于如何下载和使用bundletool,请阅读使用bundletool测试Android App Bundle

本地测试完成您的App Bundle后,您需要把它上传到Play Console控制台来测试。新的内部测试环境允许您上传一个App Bundle到Play Console控制台,并在几分钟内开始在您的设备上使用动态交付进行测试。

 

使用Play Core Library下载动态功能模块

如果您的APP包含动态功能,需要使用Play Core Library来请求,模拟和管理动态功能模块下载。学习更多,请阅读使用Play Core Library下载模块

如果您想了解这个library如何使用,试一下Play Core Library示例

 

关于Instant Apps的说明

Android App Bundle和在Google Play Instant上面的App目标都是app的模块化,所以你可以为用户创建更小,更优化的应用体验。并且在将来App Bundle会支持instant app。那意味着,你可以通过一个单独的App Bundle来发布您的安装app和特定的instant app体验。

所以,无论你是从您的安装app的Android App Bundle开始,还是您已经在开发一个Instant App,您已经在构建“instant-enabled”app的未来的路上了。

 

开始吧

当您决定支持动态交付,并为您的app构建Android App Bundle,需要遵循以下几个步骤:

  1. 下载Android Studio 3.2 Canary ——这些最简单的添加动态功能模块和构建App Bundle最简单的方式。注意:您可以保留已有的Android Studio版本,因为您可以同时安装多个版本
  2. 动态交付配置您的工程,通过包含一个基础模块,为一个配置APK组织代码和资源,另外您也可以添加动态功能模块
  3. 构建一个Android App Bundle
  4. 使用bundletool测试您的Android App Bundle  d:通过您的App Bundle生成APK,并将它们部署到一个连接的手机设备
  5. 通过Google Play注册应用签名。不然的话,您无法上传您的App Bundle到Play Console控制台
  6. 上传您的App Bundle到Play Console控制台。然后您可以使用Play Console的新的内部测试环境快速测试通过动态交付下载您的app

 

动态功能beta测试者的注意事项

  • 如果您相发布包含动态功能模块的APP到生产环境。您必须首先参照动态功能beta计划。如果您被纳入beta计划,在开发动态功能时,请牢记以下注意事项:
  • 只有运行Android5.0(API level为21)或更高的版本的设备才支持按需下载,安装动态功能。相让您的动态功能在更早的Android版本中可用,确保在您创建动态功能模块开启了Fusing
  • 确保您开启了SplitCompat,以便您的应用可以立即访问下载的动态功能模块。
  • 如果您的动态功能的下载大小很大,您的应用需要在可以下载动态功能模块到设备之前获取用户的确认
  • 动态功能模块不应该在manifest中设置activity的android:exportedtrue。这是因为不能保证在另一个app尝试去启动这个activity时这台设备已经下载好了这个动态功能模块。此外,您的应用程序应确认在尝试访问其代码和资源之前下载了动态功能。 要了解更多信息,请阅读Manage installed modules
  • 在您发布您的app前请确保已经在Play Console控制台的测试环境彻底的测试了您的动态功能。学习更多,请阅读Set up an open, closed, or internal test.

此外,请确保您知道下面部分中描述的已知问题。

 

已知问题

  • 以下是构建Android应用程序包或使用动态交付为您的应用程序提供服务时的当前已知问题。 如果您遇到以下未描述的问题,请报告错误
  • Android App Bundles不支持apk拓展文件。不过,Google Play仍然要求应用下载大小为100MB或更少。因此,例如,首次安装您的应用时,您的基础APK和其配置APK的总大小必须等于100 MB或更少。同样,任何动态功能APK及其配置APK的总大小必须为100 MB或更少。上传您的App Bundle后,如果您的App Bundle导致APK违反此限制,则Play控制台会发出警告。
  • 如果您使用了动态修改资源表的工具,则从App Bundle生成的APK可能会出现意外情况。 因此,在构建应用程序包时,建议您禁用这些工具。
  • 在一个动态功能模块的manifeste文件中,您不应该引用不在基础模块的resource资源。这是因为当Google Play生成您的app的基础APK时,它会将所有模块的manifest合并到基础APK。所以,如果模块APK的manifest引用了一个在基础APK不存在的资源,这个资源链接会中断。
  • 从Android Studio 3.2 Canary 14开始,当您改变应用的基础模块构建变体,同样的构建变体不会自动应用到依赖这个基础模块的动态功能模块。所以,您可能在构建您的APP时会收到一个错误。只需确保为基础模块和依赖它的其他模块选择相同的构建变体
  • 目前有可能配置动态功能模块的构建配置中的属性,这些属性与基础(或其他)模块中的属性相冲突。例如:你可以在基础模块中设置buildTypes.release.debuggable = true 并在动态功能模块中设置它为false,这样的冲突可能导致构建和运行时问题。记住,默认的动态功能模块会从基础模块继承一些构建配置。所以,确保您知道在您的动态功能模块构建配置中哪些配置您需要保留,哪些您应该忽略。
  • 由于应用安装可能需要下载多个APK(例如基本APK和一些配置APK),因此在手动将应用的APK传输到设备(也称为侧载)时应该小心。 否则,由于缺少代码和资源,您的应用可能会遇到运行时问题。
  • 目前,Google Play在单个APK中包含动态功能模块的所有代码和资源。 在不久的将来,对于运行Android 5.0(API等级21)及更高版本的设备,服务将优化为使用配置APK
  • 下载动态功能模块需要设备安装最新版本的Play商店应用程序。 因此,如果您的应用包含动态功能模块,则只有极少数用户下载可能会回退到单个优化的APK,这对于运行Android 4.4(API级别20)及更低版本的设备具有相同的下载体验。
赞(0) 打赏
未经允许不得转载:花花鞋 » 关于 Android App Bundles
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

国内精品Android技术社区

联系我们

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏