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

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

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

注意:将太多安装时模块配置为可移除可能会增加应用的下载和安装时间。为了避免出现此问题,请将可移除的安装时分发模块数量控制在 10 个以内。

此外,创建配置为安装时分发的功能模块可能很有用,因为如果您日后不再需要该功能,可以选择将其卸载掉。例如,如需减小应用的安装大小,您可以将完成培训或新手入门所需的内容模块化,然后在用户开始使用应用后卸载功能模块。

本部分介绍了如何创建配置为在安装时分发的功能模块。开始前,请确保您使用的是 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 会使用子项目名称的最后一个元素在功能模块的清单中注入 属性。

指定该模块的 package name。默认情况下,Android Studio 会建议一个软件包名称,该名称由基本模块的根目录软件包名称和您在上一步中指定的模块名称组合而成。

选择您希望该模块支持的 Minimum API level。此值应与基本模块的值一致。

点击 Next。

在 Module Download Options 部分中,完成以下操作:

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

...

dist:title="@string/feature_title">

注意:启用资源缩减(例如为发布 build 启用)后,如果基本模块中的代码未引用模块标题字符串资源,缩减器可能会移除该字符串资源。为了确保该字符串资源保留在构建输出中,请将该资源包含在自定义资源 keep 文件中。

在 Install-time inclusion 下的下拉菜单中,选择 Include module at install-time。Android Studio 会在该模块的清单中注入以下内容来反映您的选择:

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

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

点击 Finish。

在 Android Studio 完成模块创建后,从 Project 窗格中自行检查其内容(从菜单栏中依次选择 View > Tool Windows > Project)。默认代码、资源和组织应与标准应用模块的默认代码、资源和组织类似。

功能模块构建配置

当您使用 Android Studio 创建新的功能模块时,IDE 会对该模块的 build.gradle 文件应用以下 Gradle 插件。

// The following applies the dynamic-feature plugin to your feature module.

// The plugin includes the Gradle tasks and properties required to configure and build

// an app bundle that includes your feature module.

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

适用于标准应用插件的很多属性也适用于功能模块。下面几部分介绍了应该和不应该包含在功能模块构建配置中的属性。

不应包含在功能模块构建配置中的内容

由于每个功能模块都依赖于基本模块,因此它还会继承某些配置。因此,您应该在功能模块的 build.gradle 文件中省略以下内容:

签名配置:使用您在基本模块中指定的签名配置对 app bundle 进行签名。

minifyEnabled 属性:您只能在基本模块的构建配置中为整个应用项目启用代码缩减。因此,您应该在功能模块中省略此属性。不过,您可以为每个功能模块指定其他 ProGuard 规则。

versionCode 和 versionName:构建 app bundle 时,Gradle 会使用基本模块提供的应用版本信息。您应该在功能模块的 build.gradle 文件中省略这些属性。

与基本模块建立关系

当 Android Studio 创建功能模块时,它会向基本模块的 build.gradle 文件添加 android.dynamicFeatures 属性,以使该功能模块对基本模块可见,如下所示:

// In the base module’s build.gradle file.

android {

...

// Specifies feature modules that have a dependency on

// this base module.

dynamicFeatures = [":dynamic_feature", ":dynamic_feature2"]

}

此外,Android Studio 还会将基本模块添加为功能模块的依赖项,如下所示:

// In the feature module’s build.gradle file:

...

dependencies {

...

// Declares a dependency on the base module, ':app'.

implementation project(':app')

}

指定其他 ProGuard 规则

虽然只有基本模块的构建配置可以为应用项目启用代码缩减,但您可以使用 proguardFiles 属性为每个功能模块提供自定义 ProGuard 规则,如下所示。

android.buildTypes {

release {

// You must use the following property to specify additional ProGuard

// rules for feature modules.

proguardFiles 'proguard-rules-dynamic-features.pro'

}

}

请注意,这些 ProGuard 规则会在构建时与其他模块(包括基本模块)的规则合并在一起。因此,尽管每个功能模块都可以指定一组新规则,但这些规则会应用于应用项目中的所有模块。

部署应用

在开发支持功能模块的应用时,您可以像往常一样,从菜单栏中依次选择 Run > Run(或点击工具栏中的 Run 图标

),将该应用部署到连接的设备。

如果您的应用项目包含一个或多个功能模块,您可以通过修改现有的运行/调试配置以选择需要在部署应用时包含的功能,具体操作步骤如下:

从菜单栏中依次选择 Run > Edit Configurations。

在 Run/Debug Configurations 对话框的左侧面板中,选择所需的 Android App 配置。

在 General 标签页中的 Dynamic features to deploy 下,选中需要在部署应用时包含的每个功能模块旁边的复选框。

点击 OK。

默认情况下,Android Studio 不会使用 app bundle 部署您的应用,而是由 IDE 构建针对部署速度(而非 APK 大小)进行了优化的 APK,并将其安装到设备中。如需将 Android Studio 配置为通过 app bundle 构建和部署 APK 以及免安装体验,请修改运行/调试配置。

其他资源

如需详细了解如何使用功能模块,请使用以下资源。

博文

视频

android app功能 配置,配置安装时分发  |  Android 开发者  |  Android Developers相关推荐

  1. Android app 功能代码覆盖率--Jacoco(一)

    ​       Jacoco覆盖率主要是进行功能测试来统计下所覆盖率的类,方法等,是一种辅助评估项目质量,风险及用例设计是否完善的方法.切记,Jacoco覆盖率并不是指单元测试覆盖率: 就不说Jaco ...

  2. android 代码功能测试,Android app 功能代码覆盖率--Jacoco

    Jacoco 覆盖率主要是进行功能测试来统计下所覆盖率的类,方法等,是一种辅助评估项目质量,风险及用例设计是否完善的方法.切记,Jacoco 覆盖率并不是指单元测试覆盖率: 运用场景:1.通过自己打包 ...

  3. Android APP在线自动更新安装

    一.Android App的在线更新,主要分为热更新和一般更新,热更新是指下载修改的部分即可,一般更新是将整个安装包下载下来进行安装.本文主要探讨一般更新方法. 流程:(1)调用接口获取服务器内的AP ...

  4. android app支持多语言,支持多语言支持的Android应用程序

    本文中,我们将学习如何构建支持(国际化和本地化)多种语言的Android APP .语言在应用程序的整体界面中起着至关重要的作用,如果您可以添加更多语言,以便您可以支持更广泛的受众,那么语言就非常棒. ...

  5. Android移动开发-AndroidStudio调试安装时出现“Error running app: Default Activity Not Found”报错的解决方案

    如果在AndroidStudio调试安装程序时,如果程序中没有Activity的代码文件的话可能会在程序部署到手机或虚拟机上时碰到"Error running app: Default Ac ...

  6. Android Studio 导出的apk安装时出现解析软件包错误(已解决)

    在安装apk包时我的手机以及模拟器上都没出现这个问题,小米手机.三星手机还有其他手机安装时会出现解析软件包错误,在网上找了一下大多数是因为sdk版本的原因, 所以首先检查minSdkVersion发现 ...

  7. android app 点击跳过,【惊奇软件】Android 自动跳过 v3.4.5

    自动跳过软件,是一款Android上自动跳过开屏广告的程序,原理是模拟点击跳过按钮.软件小巧干净,不收费,无限制,就算是首页的广告banner,也可以直接关闭,可以说作者非常良心了,值得使用. 页面上 ...

  8. android app开发混合开发,混合开发入门 Vue结合Android/iOS开发仿京东项目App

    download:混合开发入门 Vue结合Android/iOS开发仿京东项目App 无需原生开发基础,也能完美呈现京东商城.本课程融合vue.Android.IOS等目前流行的前端和移动端技术,混合 ...

  9. android app 移植到pc,微软开发新应用把Android app“移植”到Win Phone

    依据微软2010年公布在Tweet上的一份专利申请书,微软正在开发一种新服务能够在不同的手机操作系统中"移植"应用和应用数据.这是说Android,iOS应用以后可以跨平台&quo ...

最新文章

  1. LeetCode 968. 监控二叉树
  2. EDM HTML编写建议和规范
  3. CSDN-markdown编辑器使用指南
  4. c语言流程图char,求救!各位大神,用程序流程图怎么描述下面这个???
  5. 关于贝叶斯的一个小小的总结
  6. 万字长文 | 漫谈libco协程设计及实现
  7. “欢迎光临”用其他各国语言怎么写、怎么说?
  8. sql order by,desc和limit使用(mysql)
  9. python数字图像处理(5):图像的绘制
  10. androidstudio mac mini_苹果M1芯片笔记本能安装运行Android Studio和模拟器吗?能!
  11. AcWing1077. 皇宫看守(树形DP)题解
  12. php trait编译实现,为什么PHP Trait不能实现接口?
  13. 给程序员的建议(转自李开复)
  14. 前端工程师提高工作效率的几个小技巧
  15. 评价——秩和比综合评价
  16. Windows7硬盘安装Linux
  17. gmp新附录 计算机系统,GMP新附录:计算机系统
  18. html自动写对联,html左右对联代码
  19. iOS 中的常用设计模式总结
  20. jeecg-boot 隐藏菜单操作步骤

热门文章

  1. 奇虎360正式开源其深度学习调度平台,支持TensorFlow、MXNet等框架
  2. 从Visual Studio里抓取抽象语法树(AST)
  3. SQL Server中查看SQL句子执行所用的时间
  4. Node.js-提供了四种形式的定时器
  5. 第四天 用户管理和服务管理
  6. Selenium Firefox启动提示导入收藏夹
  7. Outlook 2010如何更改脱机缓存数据OST文件位置?
  8. [数据结构] 时间复杂度计算
  9. cocos2d-x的win32编译环境
  10. 图像处理之基础---周末戏说卷积