组件化开发——Android studio gradle配置文件统一管理

在组件化开发中尽可能满足以下要求1

  • 添加新组件必须简单(通常会经常发生的)
  • 维护组件配置必须简单

所以简化gradle配置文件是很有必要的,通过如下方式可以省略module中gradle大量代码

第一步:新建统一配置文件

在项目根目录中新建统一配置文件 config.gradle(名字可自定义)
代码核心:

  • 使用ext统一管理常量
  • 使用subprojectshasProperty统一配置所有子build.gradleandroid字段公有内容
  • 使用project.projectDir.name获取不同build.gradle所在module名称,以此可区分不同build.gradleandroid字段差异代码
/**
 * config.gradle用于统一配置项目中各常量和依赖库
 * 使用在项目根build.gradle上方添加 apply from: "config.gradle"
 * 然后使用"rootProject.ext"对象调用各属性,例如 app.compileSdkVersion、daggerLibs.api、daggerLibs.values()
 */
ext {
    //*************************Module配置管理**************************
    app = [compileSdkVersion: 28,
           applicationId    : "com.***.mvp",
           minSdkVersion    : 15,
           targetSdkVersion : 28,
           versionCode      : 1,
           versionName      : "1.0",
           buildToolsVersion: '28.0.3',]
    //*************************引用类库版本号管理**************************

    //*************************引用类库版本号管理**************************
    dependVersion = [kotlin_version                   : '1.3.31',
                     dagger_version                   : '2.21',
                     dagger_android_version           : '2.x',
                     ......
                     ]
    //*************************引用类库版本号管理**************************

    //*************************类库maven地址**************************
    kotlinLibs = [kotlin_stdlib_jdk8: "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$dependVersion.kotlin_version"]
                      
 	 ......
  
    //dagger依赖包
    daggerLibs = [api                     : "com.google.dagger:dagger:$dependVersion.dagger_version",
                  compiler                : "com.google.dagger:dagger-compiler:$dependVersion.dagger_version",
                  dagger_android          : "com.google.dagger:dagger-android:$dependVersion.dagger_android_version",
                  dagger_android_support  : "com.google.dagger:dagger-android-support:$dependVersion.dagger_android_version",
                  dagger_android_processor: "com.google.dagger:dagger-android-processor:$dependVersion.dagger_android_version"]

    //*************************类库maven地址**************************
}

//在所有子build.gradle(module)文件中添加android 字段
subprojects {
    afterEvaluate { project ->//回调
        if (project.hasProperty('android')) {//存在android 字段
            android {
                compileSdkVersion app.compileSdkVersion
                defaultConfig {
                 switch (project.projectDir.name){//区分不同build.gradle差异代码
                        case "app":
                            applicationId app.applicationId
                            break
                        default:
                            break
                    }
                    minSdkVersion app.minSdkVersion
                    targetSdkVersion apptargetSdkVersion
                    versionCode app.versionCode
                    versionName app.versionName
                    testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
                }
                buildTypes {
                    release {
                        minifyEnabled false
                        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
                    }
                }
                buildToolsVersion appbuildToolsVersion
                compileOptions {
                    sourceCompatibility JavaVersion.VERSION_1_8
                    targetCompatibility JavaVersion.VERSION_1_8
                }

                defaultConfig {
                    javaCompileOptions {
                        annotationProcessorOptions {
                            arguments = [AROUTER_MODULE_NAME: project.getName()]
                        }
                    }
                }
            }
        }
    }
}

第二步:项目根build.gradle

在项目根build.gradle文件头部添加

apply from: "config.gradle"
......

第三步:子build.gradle

build.gradle(module中的build.gradle)

apply plugin: 'com.android.application'
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    testImplementation junitLibs.junit
    androidTestImplementation androidxLibs.runner
    androidTestImplementation androidxLibs.espresso_core
    implementation androidxLibs.constraintlayout
    implementation project(':baselibrary')
    annotationProcessor daggerLibs.compiler
    annotationProcessor arouterLibs.compiler
    annotationProcessor butterknifeLibs.compiler
}

参考

Jeroen Mols:Modularization - Lessons learned
Sam Edwards:Kotlin + buildSrc for Better Gradle Dependency Management
JessYanCoding: MVPArms


  1. Jeroen Mols:Modularization - Lessons learned ↩︎

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