文章目录
一、组件模式下为组件 Module 指定 Java 源码路径
二、主应用的角色
三、BuildConfig 中生成当前 组件 / 集成 模式字段
四、Library Module 中的代码示例
1、build.gradle 完整代码
2、集成模式 下的 清单文件
3、组件模式 下的 清单文件
4、组件模式 下的 Application 类
五、博客资源
一、组件模式下为组件 Module 指定 Java 源码路径
在 1 11 个 Android 应用中只能存在 1 11 个 Application 类 , 但是组件化开发时 , 如果 Library 模块动态修改成 Application 模块 , 还想自己定义一个 Application 类 , 这里参考上一篇博客 【Android 组件化】使用 Gradle 实现组件化 ( 组件模式与集成模式切换 ) 三、使用 sourceSets 配置组件模式下使用的清单文件 章节 , 使用 sourceSets 资源配置 , 配置 Java 代码 ;
在组件模式下 , 如果需要配置一些额外的 Java 类 , 可以在 sourceSets 中进行配置 ;
Java 源文件目录 , 默认是在 " Component\app\src\main\java " 目录下 , 该目录也是可以自定义的 ;
在 sourceSets 的 main 中 , 使用 java.srcDirs 可以配置多个目录 , 路径字符串之间使用逗号隔开 ;
android { defaultConfig { if (!isModuleMode){ // 组件模式 : 必须配置 applicationId applicationId appId["library1"] } // 资源配置 sourceSets{ main{ if (!isModuleMode){ // 组件化模式下使用 ComponentAndroidManifest.xml 作为清单文件 manifest.srcFile 'src/main/component/AndroidManifest.xml' // 配置额外的 Java 源文件目录 java.srcDirs 'src/main/component/java', 'src/main/java' }else{ // 集成模式 下使用默认设置 } } } } }
集成模式 下的目录效果 : src/main/component/java 目录是灰色的 , 并不是 Java 源码目录 ; ( 该模式下 依赖工程 是 Library Module )
组件模式 下的目录效果 : src/main/component/java 目录是蓝色的 , 是正式的 Java 源码目录 ; ( 该模式下 依赖工程 是 Application Module )
二、主应用的角色
组件化中的主应用 , 仅作为一个壳存在 , 一般不实现实际功能 , 应用的功能都是由各个组件进行实现的 ;
在主应用的 build.gradle 中配置了如下依赖库 ;
dependencies { if (isModuleMode){ // 集成模式下才能引用这两个 Library Module implementation project(':library1') implementation project(':library2') } }
如果是在 集成模式 中 , 会引入两个 Library 模块 ; 在 组件模式 中 , 两个模块是 Application 模块 , 不能引入到应用中 , 因此就不能依赖这两个 Module ;
这里就需要 主应用 与 2 22 个 Library 模块 的 耦合性不能太高 ;
三、BuildConfig 中生成当前 组件 / 集成 模式字段
如果想要在代码中 , 根据当前的组件化状态 ( 组件模式 / 集成模式 ) 进行不同的开发 , 就需在代码中获取当前 Module 是 Library Module ( 集成模式 ) 还是 Application Module ( 组件模式 ) ;
这里可以在 build.gradle 进行一些配置 , 在 BuildConfig.java 配置中 , 生成一些选项 , 如下代码就可以在 BuildConfig.java 类中生成 public static final boolean isModuleMode = false; 字段 ;
android { defaultConfig { // 在 BuildConfig 中生成如下字段 // public static final boolean isModuleMode = false; buildConfigField("boolean", "isModuleMode", String.valueOf(isModuleMode)) } }
生成的 BuildConfig.java 类 :
/** * Automatically generated file. DO NOT MODIFY */ package kim.hsl.library1; public final class BuildConfig { public static final boolean DEBUG = Boolean.parseBoolean("true"); public static final String APPLICATION_ID = "kim.hsl.library1"; public static final String BUILD_TYPE = "debug"; public static final int VERSION_CODE = 1; public static final String VERSION_NAME = "1.0"; // Field from default config. public static final boolean isModuleMode = false; }