借助功能模块,您可以从应用的基本模块中分离某些功能和资源,并将其纳入到 app bundle 中。然后,您可以自定义分发选项,以便控制搭载 Android 5.0(API 级别 21)或更高版本的设备何时以及如何下载应用功能。
请注意,这种类型的模块化所需的工作量更大,并可能需要重构您应用的现有代码,因此请仔细考虑您应用有哪些功能如果按需提供给用户可获得最大收益。
如果您想逐步对应用功能进行模块化处理,而不更改应用的行为,也不自定义高级分发选项,那么您可以创建功能模块并配置为在安装时分发,以此实现此目的。也就是说,您可以将某项功能模块化为功能模块,但不启用高级选项,以便用户安装您的应用时可以使用该功能。
此外,对于配置为安装时分发的功能模块,您可以在日后不再需要时将其卸载。为此,这些功能模块需要设置为可移除。
本部分将介绍如何创建配置为在安装时分发的功能模块。开始前,请确保您使用的是 Android Studio 3.5 或更高版本以及 Android Gradle 插件 3.5.0 或更高版本。
将新模块配置为在安装时分发
如需创建新功能模块,最简单的方法是使用 Android Studio 3.5 或更高版本。由于功能模块本身依赖于应用的基础模块,因此您只能在创建好应用项目之后再向其中添加功能模块。
如需使用 Android Studio 向应用项目中添加功能模块,请按以下步骤操作:
- 在 IDE 中打开您的应用项目(如果您尚未打开)。
- 从菜单栏中依次选择 File(文件)> New(新建)> New Module(新建模块)。
- 在Create New Module(创建新模块)对话框中,选择 Dynamic Feature Module(动态功能模块),然后点击 Next(下一步)。
- 在 Configure your new module(配置新模块)部分中,完成以下操作:
- 从下拉菜单中选择应用项目的 Base application module(应用基础模块)。
- 指定 Module name(模块名称)。IDE 会使用此名称在 Gradle 设置文件中将该模块标识为 Gradle 子项目。当您构建 app bundle 时,Gradle 会使用子项目名称的最后一个元素在功能模块的清单中注入
<manifest split>
属性。 - 指定该模块的 package name(软件包名称)。默认情况下,Android Studio 会给出一个软件包名称建议,该名称由基础模块的根软件包名称和您在上一步中指定的模块名称组合而成。
- 选择您希望该模块支持的 Minimum API level(最低 API 级别)。此值应与基础模块的值一致。
- 点击 Next(下一步)。
在 Module Download Options(模块下载选项)部分中,完成以下操作:
指定最多包含 50 个字符的 Module title(模块标题)。应用的基础模块必须将模块标题作为您能读懂的字符串资源纳入其中。使用 Android Studio 创建模块时,IDE 会为您将字符串资源添加到基本模块中,并在功能模块的清单中注入以下条目:
<dist:module ... dist:title="@string/feature_title"> </dist:module>
在 Install-time inclusion(安装时添加)下的下拉菜单中,选择 Include module at install-time(在安装时添加模块)。Android Studio 会在该模块的清单中注入以下内容来反映您的选择:
<dist:module ... > <dist:delivery> <dist:install-time /> </dist:delivery> </dist:module>
如果您想了解如何创建可在安装应用后下载的功能模块,请参阅配置按需分发。
如果您希望此模块可提供给搭载 Android 4.4(API 级别 20)及更低版本的设备并包含在多 APK 中,请选中 Fusing(融合)旁边的复选框。这意味着,您可以从不支持下载和安装拆分 APK 的设备上将其省略。Android Studio 会在该模块的清单中注入以下内容来反映您的选择:
<dist:module ...> <dist:fusing dist:include="true | false" /> </dist:module>
点击 Finish(完成)。
在 Android Studio 完成模块创建后,从 Project(项目)窗格(从菜单栏中依次选择 View [查看] > Tool Windows [工具窗口] > Project[项目])中自行检查其内容。默认代码、资源和组织应与标准应用模块类似。
将安装时模块设置为可移除
创建用于安装时分发的功能模块可能很有用,因为如果您日后不再需要该功能模块,可以选择将其卸载。例如,如需减小应用的安装大小,您可以将完成培训或新手入门所需的内容模块化,然后在用户开始使用应用后使用 Play Core API 卸载功能模块。
默认情况下,无法移除安装时模块。如需将某个模块标记为可移除并允许卸载,请添加 removable
标记并将其值设置为 true
:
<dist:module ... >
<dist:delivery>
<dist:install-time>
<dist:removable dist:value="true"/>
</dist:install-time>
</dist:delivery>
</dist:module>