配置安装时分发

借助功能模块,您可以从应用的基本模块中分离某些功能和资源,并将其纳入到 app bundle 中。然后,您可以自定义分发选项,以便控制搭载 Android 5.0(API 级别 21)或更高版本的设备何时以及如何下载应用功能。

请注意,这种类型的模块化所需的工作量更大,并可能需要重构您应用的现有代码,因此请仔细考虑您应用的哪些功能可从按需提供给用户中获得最大收益。

如果您想逐步对应用功能进行模块化处理,而不更改应用的行为,也不自定义高级分发选项,您可以通过创建功能模块(配置为在安装时分发)实现此目的。也就是说,您可以将某项功能模块化为功能模块,但不启用高级选项,以便用户安装您的应用时可以使用该功能。

此外,对于配置为安装时分发的功能模块,如果您日后不再需要该功能,可以选择将其卸载掉。为此,它们需要设置为可移除

本部分将介绍如何创建配置为在安装时分发的功能模块。开始前,请确保您使用的是 Android Studio 3.5 或更高版本以及 Android Gradle 插件 3.5.0 或更高版本。

将新模块配置为在安装时分发

如需创建新功能模块,最简单的方法是使用 Android Studio 3.5 或更高版本。由于功能模块本身依赖于基本应用模块,因此您只能在创建好应用项目之后再向其中添加功能模块。

如需使用 Android Studio 向应用项目中添加功能模块,请按以下步骤操作:

  1. 在 IDE 中打开您的应用项目(如果您尚未打开)。
  2. 从菜单栏中依次选择 File > New > New Module
  3. Create New Module 对话框中,选择 Dynamic Feature Module,然后点击 Next
  4. Configure your new module 部分中,完成以下操作:
    1. 从下拉菜单中选择应用项目的 Base application module
    2. 指定 Module name。IDE 会使用此名称在 Gradle 设置文件中将该模块标识为 Gradle 子项目。当您构建 app bundle 时,Gradle 会使用子项目名称的最后一个元素在功能模块的清单中注入 <manifest split> 属性。
    3. 指定该模块的 package name。默认情况下,Android Studio 会给出一个软件包名称建议,该名称由基本模块的根软件包名称和您在上一步中指定的模块名称组合而成。
    4. 选择您希望该模块支持的 Minimum API level。此值应与基本模块的值一致。
  5. 点击 Next
  6. Module Download Options 部分中,完成以下操作:

    1. 指定最多包含 50 个字符的 Module title。应用的基本模块必须将模块标题作为您能读懂的字符串资源纳入其中。使用 Android Studio 创建模块时,IDE 会为您将字符串资源添加到基本模块中,并在功能模块的清单中注入以下条目:

      <dist:module
          ...
          dist:title="@string/feature_title">
      </dist:module>
      
    2. Install-time inclusion 下的下拉菜单中,选择 Include module at install-time。Android Studio 会在该模块的清单中注入以下内容来反映您的选择:

      <dist:module ... >
        <dist:delivery>
            <dist:install-time />
        </dist:delivery>
      </dist:module>
      

      如果您想了解如何创建可在安装应用后下载的功能模块,请参阅配置按需分发

    3. 如果您希望此模块可提供给搭载 Android 4.4(API 级别 20)及更低版本的设备并包含在多 APK 中,请选中 Fusing 旁边的复选框。这意味着,您可以从不支持下载和安装拆分 APK 的设备上将其省略。Android Studio 会在该模块的清单中注入以下内容来反映您的选择:

      <dist:module ...>
          <dist:fusing dist:include="true | false" />
      </dist:module>
      
  7. 点击 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>