AndroidX組件化搭建MVP、MVVM以及混合使用kotlin模塊

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"]
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章