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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/lylddingHFFW/article/details/102719721

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


猜你喜欢

转载自blog.csdn.net/lylddingHFFW/article/details/102719721