【Android 组件化】使用 Gradle 实现组件化 ( 组件 / 集成模式下的 Library Module 开发 )(一)

文章目录

一、组件模式下为组件 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 )


【Android 组件化】使用 Gradle 实现组件化 ( 组件 / 集成模式下的 Library Module 开发 )(一)



组件模式 下的目录效果 : src/main/component/java 目录是蓝色的 , 是正式的 Java 源码目录 ; ( 该模式下 依赖工程 是 Application Module )


【Android 组件化】使用 Gradle 实现组件化 ( 组件 / 集成模式下的 Library 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;
}

【Android 组件化】使用 Gradle 实现组件化 ( 组件 / 集成模式下的 Library Module 开发 )(一)

上一篇:【Android 组件化】使用 Gradle 实现组件化 ( Gradle 变量定义与使用 )(一)


下一篇:【Android 组件化】使用 Gradle 实现组件化 ( 组件 / 集成模式下的 Library Module 开发 )(二)