一个Android应用程序包是一个新的上传格式,包括所有的应用程序的编译代码和资源,但推迟APK生成和sign google play。
Google Play的新应用服务模式称为动态传递,然后使用您的应用包为每个用户的设备配置生成并提供优化的APK,因此他们只下载运行您的应用所需的代码和资源。您不再需要构建,签署和管理多个APK来支持不同的设备,用户可以获得更小,更优化的下载。
此外,您可以向应用项目添加动态功能模块,并将其包含在应用包中。这些模块包含您可以决定在用户首次下载和安装应用程序时不包含的功能和资产。 使用Play核心库,您的应用可以稍后请求将这些模块下载为动态功能APK,并且通过动态传递,Google Play仅为该模块提供设备的代码和资源。
要构建应用程序包并支持动态交付,请按照下列步骤操作:
下载Android Studio 3.2或更高版本 - 这是添加动态功能模块和构建应用程序包的最简单方法。
通过包含基本模块,组织配置APK的代码和资源以及(可选)添加动态功能模块,添加对动态交付的支持。
构建Android应用程序包。
使用bundtool测试您的Android应用包,从您的应用包中生成APK并将其部署到连接的设备。
注册Google Play的应用签名。否则,您无法将应用包上传到Play控制台。
将您的应用包上传到Play控制台。然后,您可以使用Play控制台的新内部测试轨道快速测试通过动态交付下载您的应用。
如果要将包含动态要素模块的应用程序发布到生产跟踪,则必须先应用于 动态要素测试程序。如果您已接受测试计划,请在开发动态功能时牢记以下注意事项:
动态传递的一个基本组件是Android 5.0(API级别21)及更高版本上提供的拆分APK机制。拆分APK与常规APK非常相似 - 它们包括已编译的DEX字节码,资源和Android清单。但是,Android平台能够将多个已安装的拆分APK视为单个应用。也就是说,您可以安装多个可以访问公共代码和资源的拆分APK,并在设备上显示为一个已安装的应用程序。
分割APK的好处是可以分解单片APK,即包含应用支持的所有功能和设备配置的代码和资源的APK,以及根据需要安装在用户设备上的较小的离散包。
例如,一个拆分APK可能包含只有少数用户需要的附加功能的代码和资源,而另一个拆分APK包含仅用于特定语言或屏幕密度的资源。当用户请求或设备需要时,下载并安装这些拆分APK中的每一个。
以下描述了可以在设备上一起安装以形成完整应用体验的不同类型的APK。您将在本页的后续部分中了解如何配置您的应用项目以支持这些APK。
考虑具有三个动态功能模块的应用程序,并支持多个设备配置。下面的图1说明了应用程序的各种APK的依赖树可能是什么样子。请注意,基本APK构成树的头部,所有其他APK依赖于基本APK。(如果您对Android应用程序包中如何表示这些APK的模块感到好奇,请参阅Android App Bundle格式。)
请注意,您不需要自己构建这些APK - Google Play会使用您使用Android Studio构建的单个签名应用包为您完成此操作。要了解有关应用程序包格式以及如何构建应用程序包格式的更多信息,请转至 构建,部署和上传Android应用程序包。
由于运行Android 4.4(API级别19)及更低版本的设备不支持下载和安装拆分APK,因此Google Play会为这些设备提供单个APK,称为多APK,该设备针对设备的配置进行了优化。也就是说,多APK代表您的完整应用体验,但不包含不必要的代码和资源 - 例如其他屏幕密度和CPU架构的代码和资源。
但是,它们包含您的应用支持的所有语言的资源。例如,这允许用户更改应用的首选语言设置,而无需下载不同的多APK。
多APK无法在以后按需下载动态功能模块。要在此APK中包含动态模块,您必须在创建动态要素模块时 禁用 按需或启用融合。
请注意,使用动态投放,您无需为应用支持的每个设备配置构建,签名,上传和管理APK。您仍然只为整个应用构建并上传了一个应用包,Google Play会为您完成剩下的工作。因此,无论您是否计划支持运行Android 4.4或更低版本的设备,Dynamic Delivery都会为您和您的用户提供灵活的服务机制。
Android App Bundle是.aab您上传到Google Play以支持动态投放的文件(带有文件扩展名)。
应用程序包是签名的二进制文件,可以将应用程序的代码和资源组织到模块中,如图2所示。每个模块的代码和资源的组织方式与在APK中找到的类似,这是有道理的,因为每个模块都可能是作为单独的APK生成。然后,Google Play会使用应用套件生成向用户投放的各种APK,例如基本APK,动态功能APK,配置APK和(对于不支持拆分APK的设备)多APK。这是在蓝等彩色的目录drawable/,values/以及lib/目录,代表代码和资源,谷歌Play使用每个模块创建配置的APK。
注意:您为每个唯一的应用程序或applicationID构建应用程序包。也就是说,如果您使用产品风格从单个应用程序项目创建应用程序的多个版本,并且每个版本都使用唯一的 applicationID,则需要为每个版本的应用程序构建单独的应用程序包。
以下列表更详细地描述了一些应用程序包的文件和目录:
警告:如果此目录中的内容与APK根目录中的其他文件和目录冲突,则Play Console会在上载时拒绝整个应用程序包。例如,您不能包含 root/lib/目录,因为它会与lib 每个APK已包含的目录冲突。
构建和部署Android应用程序包
应用包与APK不同,因为您无法将其部署到设备。相反,它是一种上传格式,在单个构建工件中包含所有应用程序的已编译代码和资源。因此,在您上传已签名的应用套装后,Google Play会提供构建和签署应用APK所需的一切,并通过动态投放将其提供给用户。
如果您使用的是Android Studio,则 只需点击几下即可将项目构建为已签名的应用包。然后,只需将您的应用套装上传 到Play控制台,即可使用动态投放测试或发布您的应用。
在构建Android应用程序包之后,您应该测试Google Play将如何使用它来生成APK以及这些APK在部署到设备时的行为方式。
您可以使用bundletoolGradle,Android Studio和Google Play用于构建Android应用程序包或将应用程序包转换为部署到设备的APK的命令行工具在本地执行这些测试。此工具对于在构建服务器上包含应用程序包支持也很有用。要了解如何下载和使用bundletool,请阅读 使用bundletool测试Android应用程序包。
在本地测试您的应用包后,您应该通过将应用包上传到Play控制台,通过Google Play进行测试 。通过内部测试轨道,您可以将应用程序包上传到Play控制台,并在几分钟内通过Dynamic Delivery开始在设备上对其进行测试。
如果您的应用包含动态功能,则需要使用Play核心库来请求,监控和管理动态功能模块下载。要了解更多信息,请转到使用Play核心库下载模块。
如果您想查看正在运行的库,请尝试 Play Core Library示例应用程序。
在Android Studio 3.2或更高版本中, 只要应用程序的大小足够小,您就可以为应用程序包添加即时体验。有关您可以创建的不同类型即时体验的大小限制的详细信息,请参阅Google Play Instant概述。
以下是构建Android应用程序包或使用动态交付为您的应用程序提供服务时当前已知的问题。如果您遇到下面未描述的问题,请 报告错误。