一.说明
按照上一章节,新建的module会有自己的默认配置。为了组件化的开发,我们需要修改这些配置。
Android 组件化 从零创建一个组件化的项目
https://blog.youkuaiyun.com/weixin_37730482/article/details/70239680
二.Module的AndroidManifest.xml修改
1.项目截图
即 该Module我们先创建了两个Activity。我们看一下清单文件的修改。
2.默认的清单文件
新建的Module,会生成一个默认的清单文件,如下
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wjn.component.base">
<!--该Module单独运行时使用的清单文件 相当于一个独立的项目-->
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ComponentDemo">
<activity android:name=".BaseMainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".BaseTestActivity"/>
</application>
</manifest>
3.说明
作为一个单独的项目,这样的清单文件我们是再熟悉不过了,也是最正常的清单文件的配置。但是组件化中,这样显然是不可以的。因为组件化中每个Module的清单文件最后都是要合并的。所以需要修改。但是因为每一个Module又可以当成是一个单独的项目,那这个清单文件就是可以的了。
那也怎么操作呢?我们可以再新建一个清单文件。当此Module作为项目的组件使用时,使用组件该有的清单文件。当此Module作为单独的项目时,使用正常的清单文件。
4.具体修改
新建一个文件夹 存放单独运行时的清单文件,截图如下
module文件夹中存放的清单文件,就是默认生成的清单文件。作为该Module单独运行时使用。
常规文件夹中存放的清单文件,是修改后的清单文件。作为该Module作为壳工程的一部分运行时使用。内容如下
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wjn.component.base">
<application>
<activity android:name=".BaseMainActivity" />
<activity android:name=".BaseTestActivity" />
</application>
</manifest>
即 仅仅是注册了该module中的四大组件,这里仅仅使用了两个Activity。
到这里,我们就完成了清单文件的修改。即 相比普通的项目,我们新建了一个文件夹存放清单文件,然后将默认生成的清单文件修改成组件化可用的清单文件。那么该module什么时候单独运行,什么时候作为Module运行?以及如何加载不同文件夹中的清单文件呢?这就需要我们配置Gradle文件来完成。
三.Module的build.gradle修改
1.自定义Gradle文件myConfig.gradle放在项目的根目录
myConfig.gradle文件内容
ext {
/** true 每个业务Module可以单独开发 false 每个业务Module以lib的方式运行 */
isComponentBaseModule = true//Base组件
isComponentUIModule = false//UI组件
}
2.项目的Gradle文件配置刚刚新建的Gradle文件
apply from: "myConfig.gradle"
buildscript {
...
}
allprojects {
...
}
task clean(type: Delete) {
delete rootProject.buildDir
}
这样,我们就可以使用新建的Gradle文件中的变量控制Module什么时候单独运行,什么时候作为组件运行了。那么这个变量在什么地方使用,以及加载不同的文件夹中的清单文件怎么操作呢?需要修改该Module的Gradle文件。
3.Module的Gradle文件修改
/** 修改处1:根据isComponentBaseModule字段 决定该Module的产物*/
if (Boolean.valueOf(rootProject.ext.isComponentBaseModule)) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
android {
compileSdkVersion 30
defaultConfig {
/** 修改处2:根据isComponentBaseModule字段 决定是否可以有applicationId 只有单独运行时才可以有applicationId*/
if (Boolean.valueOf(rootProject.ext.isComponentBaseModule)) {
applicationId "com.wjn.component.base"
}
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
/** 修改处3:sourceSets闭包 配置不同文件夹的清单文件 根据isComponentBaseModule字段 */
sourceSets {
main {
if (Boolean.valueOf(rootProject.ext.isComponentBaseModule)) {
manifest.srcFile 'src/main/module/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
...
}
4.壳工程(APP)的Gradle文件修改
plugins {
id 'com.android.application'
}
android {
compileSdkVersion 30
defaultConfig {
applicationId "com.wjn.componentdemo"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
dependencies {
...
/** 是否加载 component_base */
if (!Boolean.valueOf(rootProject.ext.isComponentBaseModule)) {
implementation project(':component_base')
}
}
这样我们就完成了基本的组件化配置,下面我们就来开始开发吧。
Android 组件化 各个Module统一配置Gradle文件
https://blog.youkuaiyun.com/weixin_37730482/article/details/70243331