参考来源:参考文章
1.这里的模块要有:主模块(app),modulea,moduleb,modulec,common。
四个子模块均是在Project->app下新建的modele->Android Library
2.这里给出各个模块的build.gradle的配置:
(1)主模块(Project:项目名)的build.gradle中添加
ext{
isDebug = false
android = [
compileSdkVersion: 29,
buildToolsVersion :"29.0.3",
minSdkVersion: 16,
targetSdkVersion: 29,
versionCode :1,
versionName :"1.0"
]
}
//主要用于各个模块统一配置,看做通用配置常量就行
(2)主模块(Module:app)的build.gradle中
//***仅仅贴出关键部分,由于是kotlin,配置是不同于java的(这里指kapt这段)
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
defaultConfig {
applicationId "com.example.architectrue"
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
//下面是依赖中的,这里说明一下app:modulea是根据settings.gradle中配置的,不知为何参考的文章配置为:modulea,其他等同。
// 组件化开发
if(!isDebug) {
implementation project(':app:modulea')
implementation project(':app:moduleb')
implementation project(':app:modulec')
}
//ARouter
implementation 'com.alibaba:arouter-api:1.5.1'
kapt 'com.alibaba:arouter-compiler:1.5.1'
(3)moulea,moduleb,modulec中的build.gradle相同,如下
if (isDebug) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
apply plugin: 'kotlin-kapt'
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
sourceSets {
main {
if (isDebug) {
manifest.srcFile 'src/debug/AndroidManifest.xml'
} else {
manifest.srcFile 'src/release/AndroidManifest.xml'
java {
exclude 'debug/**'
}
}
}
}
defaultConfig {
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
//**依赖
implementation project(':app:common')
//ARouter
implementation 'com.alibaba:arouter-api:1.5.1'
kapt 'com.alibaba:arouter-compiler:1.5.1'
(4)common中的build.gradle如下
apply plugin: 'com.android.library'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
//**依赖,implementation要用api替代
api 'com.alibaba:arouter-api:1.5.1'
api 'androidx.constraintlayout:constraintlayout:2.0.4'
kapt 'com.alibaba:arouter-compiler:1.5.1'
3.在modulea,moduleb,modulec的src目录下新建debug和release目录,
然后里面都建一个AndroidManifest.xml文件
(1)modulec中的debug中的AndroidManifest.xml内容如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.modulec">
<application
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
<!--application里的属性必须和主工程里的一致,不然会报错Manifest merger failed with multiple errors, see logs-->
<!--若真要不一致,可以在主工程的application标签中添加tools:replace="android:label,android:theme,android:icon,android:roundIcon"-->
(2)modulec中的release的AndroidManifest.xml内容如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.modulec" />
到这里配置就完成了,关于ARouter的使用这里也有坑,这里给一下。
(1)路由注解:由于是使用kotlin,得加上@JvmField,不然一直报成员private的错误。
@JvmField
@Autowired
var name: String? = “”
(2)路径必须有两级以上 path = “/modulea/MainActivity”
(3)即使common没有用到ARouter,也得配置,上面已经配置了。