組件化開發——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 ↩︎

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