上一篇文章,我们讨论了组件之间如何进行通信,有兴趣可以去看看。
从0开始,编写一个组件化开发框架<一>
这篇文章我们考虑一下,如何动态设置组件是否作为独立app单独编译运行。
自定义一个配置文件app_config.gradle
ext {
isRelease = true; //是否是发布版本,这里设置之后就可以控制组件是否可以单独编译运行
packageNameForAPT = "com.example.router" //上一篇文章中提到的包名
}
在根目录下的build.gradle
文件里添加对app_config.gradle
有引用
apply from : "app_config.gradle"
payment
组件的build.gradle
文件里根据isRelease
动态设置,其他组件要做设置
if (isRelease) { //如果是release版本,则作为library,如果是debug,则作为application
apply plugin: 'com.android.library'
} else {
apply plugin: 'com.android.application'
}
在defaultConfig里也要添加一句:
defaultConfig {
// applicationId
if (!isRelease) { // 如果是集成化模式,不能有applicationId
applicationId app_appid.payment // 组件化模式能独立运行才能有applicationId
}
}
因为如果是集成化模式,不能有applicationId
在app下的build.gradle
文件里的dependencies
里,对其他组件的依赖也要添加条件判断
if (isRelease) {
implementation project(path: ':order')
implementation project(path: ':payment')
implementation project(path: ':usercenter')
}
到这里,就可以完成在app_config.gradle
文件里配置isRelease
的值就就可以修改是否需要单独编译运行。
补充
如果想在各模块里使用这个isRelease
的值做一些逻辑判断,可以在模块的build.gradle
文件里的defaultConfig
闭包内添加一句:
buildConfigField("boolean", "isRelease", String.valueOf(isRelease))
然后在模块里就可以通过BuildConfig.isRelease
获取到值。