组件化的开发模式,下面依次是根gradle配置,base模块,app模块和login模块的类和gradle配置:
1.项目根build.gradle配置:
// Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins {
id 'com.android.application' version '8.0.2' apply false
id 'com.android.library' version '8.0.2' apply false
id 'org.jetbrains.kotlin.android' version '1.7.20' apply false
}
ext {
//当它为true时,调试模式,组件可以单独运行。如果是false,正式编译打包的模式。
isDebug = false
android = [
compileSdk : 33,
applicationId: "com.example.demo4",
minSdk : 24,
targetSdk : 33,
versionCode : 1,
versionName : "1.0"
]
applicationId = [
"app" : "com.example.demo4",
"main" : "com.example.module.main",
"base" : "com.example.libbase",
"pay" : "com.example.pay",
"login" : "com.example.module.login",
"message": "com.hnucm.module.message",
"mine" : "com.hnucm.module.mine"
]
//SDk中核心的库
library = [
corektx : "androidx.core:core-ktx:1.8.0",
appcompat : "androidx.appcompat:appcompat:1.4.1",
material : "com.google.android.material:material:1.5.0",
constraintlayout: "androidx.constraintlayout:constraintlayout:2.1.3"
]
//第三方的库
arouter_api = "com.alibaba:arouter-api:1.5.2"
//ARouter 的注解处理器
arouter_compiler = "com.alibaba:arouter-compiler:1.5.2"
gson = "com.google.code.gson:gson:2.8.6"
}
2.base模块的gradle:
plugins {
// id 'com.android.library'
id 'org.jetbrains.kotlin.android'
}
def cfg = rootProject.ext
apply plugin: 'com.android.library'
android {
namespace cfg.applicationId.base
compileSdk cfg.android.compileSdk
defaultConfig {
minSdk cfg.android.minSdk
targetSdk cfg.android.targetSdk
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
consumerProguardFiles "consumer-rules.pro"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
}
dependencies {
api cfg.library.appcompat
api cfg.library.material
api cfg.library.constraintlayout
api cfg.arouter_api
implementation 'androidx.core:core-ktx:1.8.0'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
}
3.app模块的初始化:
class App :Application() {
override fun onCreate() {
super.onCreate()
ARouter.openLog(); // 打印日志
ARouter.openDebug(); // 开启调试模式(如果在InstantRun模式下运行,必须开启调试模式!线上版本需要关闭,否则有安全风险)
ARouter.init(this); // 尽可能早,推荐在Application中初始化
}
}
4.app模块的gradle配置
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
def cfg = rootProject.ext
android {
namespace cfg.applicationId.app
compileSdk cfg.android.compileSdk
defaultConfig {
applicationId cfg.applicationId.app
minSdk cfg.android.minSdk
targetSdk cfg.android.targetSdk
versionCode cfg.android.versionCode
versionName cfg.android.versionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary true
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
packagingOptions {
resources {
excludes += '/META-INF/{AL2.0,LGPL2.1}'
}
}
}
dependencies {
implementation project(":moduleBase:libBase")
implementation 'androidx.core:core-ktx:1.8.0'
implementation platform('org.jetbrains.kotlin:kotlin-bom:1.8.0')
implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.1'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
}
5.app模块的起始跳转页:
class StartActivity : Activity() {
@SuppressLint("MissingInflatedId")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_start)
findViewById<Button>(R.id.btn_jump).setOnClickListener {
ARouter.getInstance().build("/login/LoginActivity").navigation();
}
}
}
6.登录模块的gradle:
plugins {
// id 'com.android.application'
id 'org.jetbrains.kotlin.android'
}
def cfg = rootProject.ext
if (cfg.isDebug) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
android {
namespace cfg.applicationId.login
compileSdk cfg.android.compileSdk
defaultConfig {
if (cfg.isDebug) {
applicationId cfg.applicationId.login
}
minSdk cfg.android.minSdk
targetSdk cfg.android.targetSdk
versionCode cfg.android.versionCode
versionName cfg.android.versionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
vectorDrawables {
useSupportLibrary true
}
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
packagingOptions {
resources {
excludes += '/META-INF/{AL2.0,LGPL2.1}'
}
}
sourceSets {
main{
if (cfg.isDebug) {
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
}else{
manifest.srcFile 'src/main/AndroidManifest.xml'
}
}
}
}
dependencies {
implementation project(":moduleBase:libBase")
annotationProcessor cfg.arouter_compiler
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.2.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.6.1'
}
7.跳转的目标页:
@Route(path = "/login/LoginActivity")
class LoginActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login)
}
}