功能模块允许您将某些功能和资源与应用的基础模块分开,并将它们包含在应用包中。然后,您可以自定义交付选项来控制运行 Android 5.0(API 级别 21)或更高版本的设备何时以及如何下载应用的功能。
请记住,这种模块化需要更多努力,并且可能需要重构您应用的现有代码,因此请仔细考虑您的应用中哪些功能最能受益于按需向用户提供。
如果您想逐步模块化应用功能,而无需更改应用的行为或自定义高级交付选项,您可以通过创建配置为安装时交付的功能模块来实现。也就是说,您可以将功能模块化为功能模块,但不启用高级选项,因此在用户安装应用时即可使用该功能。
此外,配置为安装时交付的功能模块可以选择在不再需要时卸载。为此,需要将其设置为可移除的。
本节介绍如何创建用于安装时交付的功能模块。在开始之前,请确保您使用的是Android Studio 3.5或更高版本和 Android Gradle Plugin 3.5.0 或更高版本。
配置用于安装时交付的新模块
创建新功能模块最简单的方法是使用Android Studio 3.5或更高版本。由于功能模块与基础应用模块存在固有的依赖关系,因此您只能将其添加到现有应用项目中。
要使用 Android Studio 将功能模块添加到您的应用项目,请按如下步骤操作:
- 如果您尚未这样做,请在 IDE 中打开您的应用项目。
- 从菜单栏中选择**文件 > 新建 > 新建模块**。
- 在**创建新的模块**对话框中,选择**动态功能模块**,然后单击**下一步**。
- 在**配置您的新模块**部分中,完成以下步骤:
- 从下拉菜单中选择应用项目的**基础应用模块**。
- 指定**模块名称**。IDE 使用此名称在您的Gradle 设置文件中将模块标识为 Gradle 子项目。构建应用包时,Gradle 使用子项目名称的最后一个元素在功能模块的清单中注入`
<manifest split>
` 属性。 - 指定模块的**包名**。默认情况下,Android Studio 会建议一个包名,它结合了基础模块的根包名和您在上一步中指定的模块名称。
- 选择模块要支持的**最低 API 级别**。此值应与基础模块的值匹配。
- 单击**下一步**。
在**模块下载选项**部分中,完成以下步骤:
使用最多 50 个字符指定**模块标题**。您的应用的基础模块必须包含模块标题作为字符串资源,您可以对其进行翻译。使用 Android Studio 创建模块时,IDE 会为您将字符串资源添加到基础模块中,并在功能模块的清单中注入以下条目:
<dist:module ... dist:title="@string/feature_title"> </dist:module>
在**安装时包含**下的下拉菜单中,选择**安装时包含模块**。Android Studio 会在模块的清单中注入以下内容以反映您的选择:
<dist:module ... > <dist:delivery> <dist:install-time /> </dist:delivery> </dist:module>
如果您想了解如何创建可在应用安装后下载的功能模块,请阅读配置按需交付。
如果您希望此模块可用于运行 Android 4.4(API 级别 20)及更低版本的设备并包含在多 APK 中,请选中融合旁边的复选框。这意味着您可以省略不支持下载和安装拆分 APK 的设备。Android Studio 会在模块的清单中注入以下内容以反映您的选择。
<dist:module ...> <dist:fusing dist:include="true | false" /> </dist:module>
点击完成。
Android Studio 完成创建模块后,请从项目窗格中自行检查其内容(从菜单栏中选择查看 > 工具窗口 > 项目)。默认代码、资源和组织结构应与标准应用模块类似。
使安装时模块可移除
为安装时交付创建具有稍后卸载选项(如果不再需要)的功能模块可能很有用。例如,为了减小应用的安装大小,您可以将培训或入门所需的内容模块化,然后使用 Play Core API 卸载功能模块,方法是在用户设置好使用您的应用后进行卸载。
默认情况下,安装时模块不可移除。要将模块标记为可移除并允许其卸载,请添加removable
标签并将其值设置为true
<dist:module ... >
<dist:delivery>
<dist:install-time>
<dist:removable dist:value="true"/>
</dist:install-time>
</dist:delivery>
</dist:module>