天天看点

app bundle 配置 at-install delivery

动态特性模块允许您将某些特性和资源从应用程序的基本模块中分离出来,并将它们包含在应用程序包中。通过动态交付,您可以定制交付选项来控制运行Android 5.0 (API级别21)或更高版本的设备何时以及如何下载应用程序的功能。

请记住,这种类型的模块化需要更多的工作,可能还需要重构应用程序的现有代码,因此请仔细考虑哪些应用程序特性将从按需提供给用户中获益最大。

如果您希望随着时间的推移逐步模块化应用程序特性,而不需要更改应用程序的行为或定制高级交付选项,则可以通过创建为at-install交付配置的动态特性模块来实现。也就是说,您可以将某个特性模块化为动态特性,但不能启用高级选项,以便在用户安装应用程序时可以使用该特性。

此外,创建为at-install交付配置的动态特性可能很有用,因为如果不再需要,您可以选择稍后卸载该特性。例如,要减小应用程序的安装大小,可以模块化所需的内容,然后在用户设置好要使用应用程序后卸载动态特性模块。

本节描述如何为at-install交付创建动态特性模块。在开始之前,请确保您使用的是Android Studio 3.5或更高版本,以及Android Gradle Plugin 3.5.0或更高版本。

为at-install交付配置一个新模块

创建一个新的动态特性模块最简单的方法是使用Android Studio 3.5或更高版本。因为动态特性模块对基本应用程序模块有固有的依赖性,所以只能将它们添加到现有的应用程序项目中。

要使用Android Studio将动态特性模块添加到您的应用程序项目中,请执行以下步骤:

1.请在IDE中打开您的应用程序项目。

2.从菜单栏中选择文件> New > New Module。

3.在新建模块对话框中,选择Dynamic Feature Module并单击Next。

4.在“ Configure your new module”一节中,完成以下操作:

a.从下拉菜单中选择应用程序项目Base application module。

b.指定模块名称。IDE使用这个名称将模块标识为Gradle设置文件中的Gradle子项目。在构建应用程序包时,Gradle使用子项目名称的最后一个<manifest split>元素将属性注入到dynamic feature module’s manifest.

c.指定模块的包名。默认情况下,Android Studio建议使用一个包名,它结合了基本模块的根包名和您在前面步骤中指定的模块名。

b.选择您希望模块支持的最低API级别。这个值应该与base module的值匹配。

5.单击Next。

6.在Module Download Options选项部分,完成以下操作:

a.指定最多使用50个字符的模块标题。您的应用程序的base module必须包含模块标题作为字符串资源,您可以翻译它。当使用Android Studio创建模块时,IDE将字符串资源添加到基本模块中,并在动态特性模块的清单中注入以下条目:
<dist:module
    ...
    dist:title="@string/title_dynamic_feature">
</dist:module>
           

注意:如果您启用了资源收缩,例如在您的发行版构建中,如果您的base 中的代码没有引用模块标题字符串资源,shrinker可能会删除它。要确保字符串资源保留在构建输出中,请将该资源包含在自定义资源keep文件中。

b.在“Install-time inclusion”下拉菜单中,选择“Include module at install-time”。Android Studio在模块的manifest中注入以下内容来反映你的选择:

<dist:module ... >
  <dist:delivery>
      <dist:install-time />
  </dist:delivery>
</dist:module>
           
c.如果您希望这个模块对运行Android 4.4 (API级别20)或更低的设备可用,并且包含在multi- apk中,请选中Fusing旁边的复选框。这意味着您可以从不支持下载和安装split apk的设备中省略它。Android Studio在模块的manifest中注入以下内容来反映你的选择:
<dist:module ...>
    <dist:fusing dist:include="true | false" />
</dist:module>
           

7.单击 Finish.

在Android Studio完成创建模块之后,您可以从Project窗格中查看模块的内容(从菜单栏中选择View > Tool Windows > Project)。默认的代码、资源和组织应该类似于标准的app模块。

动态特性模块构建配置

当您使用Android Studio创建一个新的动态特性模块时,IDE将以下Gradle插件应用到模块的构建中。gradle文件。

// The following applies the dynamic-feature plugin to your dynamic feature module.
// The plugin includes the Gradle tasks and properties required to configure and build
// an app bundle that includes your dynamic feature module.

apply plugin: 'com.android.dynamic-feature'
           

标准应用程序插件提供的许多属性也可用于动态特性模块。下面的部分描述了在动态特性模块的构建配置中应该和不应该包含的属性。

动态特性模块构建配置中不应该包含哪些内容:

因为每个动态特性模块都依赖于基本模块,所以它也继承某些配置。因此,您应该在动态特性模块的构建的gradle中省略以下内容:

Signing configurations:App bundles 使用在base module 中指定的签名配置进行签名。

minifyEnabled

 :只可以早base module的构建配置启用整个应用程序项目的代码收缩。因此,您应该在动态特性模块中省略此属性。但是,您可以为每个动态特性模块指定额外的保护规则。

versionCode

 and 

versionName

: 在构建App bundles时,Gradle使用base module提供的应用程序版本信息。您应该在动态模块的gradle构建中省略这些属性。

建立与基本模块的关系

当Android Studio创建动态特性模块时,它通过添加android.dynamicFeatures 使base module可见。 base module 构建的 gradle文件 dynamicFeatures属性,如下图所示:

// In the base module’s build.gradle file.
android {
    ...
    // Specifies dynamic feature modules that have a dependency on
    // this base module.
    dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]
}
           

此外,Android Studio将base module作为动态特性模块的依赖项,如下图所示:

// In the dynamic feature module’s build.gradle file:
...
dependencies {
    ...
    // Declares a dependency on the base module, ':app'.
    implementation project(':app')
}
           

指定额外的防护规则

尽管只有base module 的构建配置可能支持应用程序项目的代码收缩,但您可以使用proguardFiles属性为每个动态特性模块提供定制的ProGuard规则,如下所示。

android.buildTypes {
     release {
         // You must use the following property to specify additional ProGuard
         // rules for dynamic feature modules.
         proguardFiles 'proguard-rules-dynamic-features.pro'
     }
}
           

注意,这些防护规则在构建时与来自其他模块(包括base module)的规则合并。因此,虽然每个动态特性模块可以指定一组新的规则,但这些规则适用于app项目中的所有模块。

部署应用

当您在开发支持动态交付的应用程序时,您可以像往常一样通过从菜单栏中选择Run > Run(或单击工具栏中的Run)将应用程序部署到连接的设备上。

如果您的应用程序项目包含一个或多个动态特性模块,您可以通过修改现有的运行/调试配置,在部署应用程序时选择包含哪些动态特性,如下所示:

1.从菜单栏中选择Run > Edit Configurations。

2.在“Run/Debug Configurations”对话框的左侧面板中,选择所需的Android应用程序配置。

3.在“ Dynamic features to deploy”选项卡中,选中部署应用程序时希望包含的每个动态特性模块旁边的复选框。

4.单击OK。

默认情况下,Android Studio不会使用应用程序包来部署应用程序。相反,IDE会构建并安装APK到您的设备上,这些APK是针对部署速度而不是APK大小进行优化的。要将Android Studio配置为从app bundle 构建和部署apk和即时体验,请修改运行/调试配置。