AndroidX組件化搭建MVP、MVVM以及混合使用kotlin模塊
環境各版本:
android studio 3.5.1
android gradle plugin version 3.5.1
gradle version 5.4.1
ViewModel 2.1.0
LiveData 2.1.0
編譯環境 jkd1.8
kotlin 1.3.5
本文只記錄在搭建過程中走過的一些彎路,共大家參考,希望對大家有所幫助。
可參考本文組件化demo
1 module.build.gradle 公共配置:由於和kotlin模塊混用,所以移除了部分java模塊的公共配置,放在各自的module中。
//切換集成和module
if (isRunModule.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
android {
compileSdkVersion rootProject.ext.androidVersion.compileSdkVersion
buildToolsVersion rootProject.ext.androidVersion.buildToolsVersion
defaultConfig {
minSdkVersion rootProject.ext.androidVersion.minSdkVersion
targetSdkVersion rootProject.ext.androidVersion.targetSdkVersion
versionCode rootProject.ext.androidVersion.versionCode
versionName rootProject.ext.androidVersion.versionName
multiDexEnabled rootProject.ext.androidVersion.multiDexEnabled
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
//AndroidManifest路徑
if (isRunModule.toBoolean()) {
manifest.srcFile 'src/main/module/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/AndroidManifest.xml'
java {
exclude 'debug/**'
}
}
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
//以下配置 每個lib or module 都要加
//=========================================================
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
//開啓DataBinding
dataBinding {
enabled isEnableDatabingding.toBoolean()
}
//=========================================================
}
2 java 和kotlin module配置的區別
java module配置
apply from: "../module.build.gradle"
apply plugin: 'com.jakewharton.butterknife'
android {
defaultConfig {
if (isRunModule.toBoolean()) {
applicationId "com.lyldding.moduleMain"
}
//區別
//每個使用arouter的業務組件都要加
javaCompileOptions {
annotationProcessorOptions {
arguments = [AROUTER_MODULE_NAME: project.getName()]
}
}
}
resourcePrefix "main_"
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
api project(':commonLib')
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
//區別
//每個使用arouter的業務組件都要加
annotationProcessor rootProject.ext.dependencies["arouter-compiler"]
implementation(rootProject.ext.dependencies["butterknife"]) {
exclude group: 'com.android.support'
}
annotationProcessor rootProject.ext.dependencies["butterknife-compiler"]
}
kotlin module配置
apply from: "../module.build.gradle"
//區別
//每個使用arouter的業務組件都要加
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-kapt'
apply plugin: 'kotlin-android-extensions'
//區別
//每個使用arouter的業務組件都要加
kapt {
arguments {
arg("AROUTER_MODULE_NAME", project.getName())
}
}
android {
defaultConfig {
if (isRunModule.toBoolean()) {
applicationId "com.lyldding.modulekotlin"
}
}
resourcePrefix "kotlin_"
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
api project(':commonLib')
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
implementation rootProject.ext.kotlin["kotlin-stdlib-jdk"]
//區別
//每個使用arouter的業務組件都要加
kapt rootProject.ext.dependencies["arouter-compiler"]
}