Android - 统一依赖管理(config.gradle)

前语

本文归于 《一款基于MVP架构的快速使用开发结构,kotlin版别》(注:此文章还在更新中,可先看看,敬请期待!) 的扩展文章,具体介绍在运用 LeoFastDevMvpKotlin 快速开发结构的时分,进行项目依靠办理的办法。

介绍

Android 依靠一致办理距目前为止,博主一共知道有三种办法,分别是:

  1. 传统apply from的方法(也是本文想讲的一种方法):新建一个 「config.gradle」 文件,然后将项目中一切依靠写在里边,更新只需修改 「config.gradle」 文件内容,作用于一切module。
  2. buildSrc 方法:当运转 Gradle 时会检查项目中是否存在一个名为 buildSrc 的目录。然后 Gradle 会主动编译并测验这段代码,并将其放入构建脚本的类途径中, 关于多项目构建,只能有一个 buildSrc 目录,该目录有必要坐落根项目目录中, buildSrc 是 Gradle 项目根目录下的一个目录。
  3. Composing builds 方法:复合构建只是包括其他构建的构建. 在许多方面,复合构建类似于 Gradle 多项目构建,不同之处在于,它包括完好的 builds ,而不是包括单个 projects,总的来说,他有 buildSrc 方法的长处,一起更新不需求从头构建整个项目。

三种方法各有各的好,目前最完美的应该是第三种完成。但是这种方法不利于结构运用,由于它归于的是新建一个module,假如项目远程依靠了结构,默认也包括了这个 module。所以博主选择了第一种方法。以下文章也是环绕第一种方法进行解说。

完成方法

完成这个一致依靠办理,拢共分三步,分别是:

  • 第一步:创立「config.gradle」 文件
  • 第二步:项目傍边引进「config.gradle」
  • 第三步:在一切module的「build.gradle」傍边添加依靠
  • 第一步:创立 「config.gradle」 文件

    首要将 Aandroid Studio 目录的Android格式修改为Project,然后再创立一个「config.gradle」的文件

    Android - 统一依赖管理(config.gradle)

    然后咱们修改文章里边的内容,这儿直接给出结构的代码出来(篇幅太长,省略部分代码):

    ext {
    /**
     * 基础配置 对应 build.gradle 傍边 android 括号里边的值
     */
    android = [
            compileSdk               : 32,
            minSdk                   : 21,
            targetSdk                : 32,
            versionCode              : 1,
            versionName              : "1.0.0",
            testInstrumentationRunner: "androidx.test.runner.AndroidJUnitRunner",
            consumerProguardFiles    : "consumer-rules.pro"
            ......
    ]
    /**
     * 版别号 包括每一个依靠的版别号,只是作用于下面的 dependencies
     */
    version = [
            coreKtx              : "1.7.0",
            appcompat            : "1.6.1",
            material             : "1.8.0",
            constraintLayout     : "2.1.3",
            navigationFragmentKtx: "2.3.5",
            navigationUiKtx      : "2.3.5",
            junit                : "4.13.2",
            testJunit            : "1.1.5",
            espresso             : "3.4.0",
            ......
    ]
    /**
     * 项目依靠 可根据项目添加删去,但是可不删去本文件里的,在 build.gradle 不写依靠即可
     * 由于MVP结构默认依靠的也在次文件中,建议只添加,不要删去
     */
    dependencies = [
            coreKtx                    : "androidx.core:core-ktx:$version.coreKtx",
            appcompat                  : "androidx.appcompat:appcompat:$version.appcompat",
            material                   : "com.google.android.material:material:$version.material",
            constraintLayout           : "androidx.constraintlayout:constraintlayout:$version.constraintLayout",
            navigationFragmentKtx      : "androidx.navigation:navigation-fragment-ktx:$version.navigationFragmentKtx",
            navigationUiKtx            : "androidx.navigation:navigation-ui-ktx:$version.navigationUiKtx",
            junit                      : "junit:junit:$version.junit",
            testJunit                  : "androidx.test.ext:junit:$version.testJunit",
            espresso                   : "androidx.test.espresso:espresso-core:$version.espresso",
            ......
            ]
    }
    

    简单了解便是将一切的依靠,分成版别号以及依靠名两个数组的方法保存,一切都在这个文件一致管办理。用 ext 包裹三个数组:第一个是「build.gradle」Android 里边的,第二个是版别号,第三个是依靠的名字。依靠名字数组里边的依靠版别号经过 $ 关键字指代 version 数组里边的版别号

  • 第二步:项目傍边引进 「config.gradle」

    将「config.gradle」文件引进项目傍边,在项目的根目录的「build.gradle」文件(也便是刚刚新建的 「config.gradle」同目录下的),添加如下代码:

    apply from:"config.gradle"
    

    需求注意的的是,假如你是 AndroidStudio 4.0+ 那么你将看到这样的「build.gradle」文件

    // Top-level build file where you can add configuration options common to all sub-projects/modules.
    plugins {
        id 'com.android.application' version '7.2.2' apply false
        id 'com.android.library' version '7.2.2' apply false
        id 'org.jetbrains.kotlin.android' version '1.7.10' apply false
    }
    apply from:"config.gradle"
    

    相反,假如你是 AndroidStudio 4.0- 那么你将会看到这样的「build.gradle」文件

    
    apply from: "config.gradle"
    buildscript {
        ext.kotlin_version="1.7.10"
        repositories {
            maven { url "https://jitpack.io" }
            mavenCentral()
            google()
        }
        dependencies {
        classpath "com.android.tools.build:gradle:4.2.1"
        classpath 'com.jakewharton:butterknife-gradle-plugin:10.2.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        }
    }
    allprojects {
        repositories {
            maven { url "https://jitpack.io" }
            mavenCentral()
            google()
        }
    }
    task clean(type: Delete) {
        delete rootProject.buildDir
    }
    

    不过只是是两个文件里边的内容不一致,这个文件的位置是相同的,而且咱们添加的引进代码也是相同的。可以说,这只是顺带提一嘴,实际上不影响咱们完成一致依靠办理这个方法。

  • 第三步:在一切module的「build.gradle」傍边添加依靠

    这一步是最重要的,咱们完成了上面两步之后,只是做好了准备,现在咱们需求将咱们每一个module里边「build.gradle」文件里边的依靠指向「config.gradle」文件。也便是下图圈起来的 那两个「build.gradle」文件。

    Android - 统一依赖管理(config.gradle)

    由于咱们第二步的时分已经在根目录引进了「config.gradle」,所以咱们在「build.gradle」就可以指向「config.gradle」例如:

    implementation rootProject.ext.dependencies.coreKtx

    这一行,就指代了咱们「config.gradle」文件里边的 dependencies 数组里边的 coreKtx 的内容。完好示例如下:

    plugins {
        id 'com.android.application'
        id 'org.jetbrains.kotlin.android'
    }
    android {
        namespace 'leo.dev.mvp.kt'
    //    compileSdk 32
        compileSdk rootProject.ext.android.compileSdk
        defaultConfig {
            applicationId "leo.dev.mvp.kt"
    //        minSdk 21
    //        targetSdk 32
    //        versionCode 1
    //        versionName "1.0"
    //
    //        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
            minSdk rootProject.ext.android.minSdk
            targetSdk rootProject.ext.android.targetSdk
            versionCode rootProject.ext.android.versionCode
            versionName rootProject.ext.android.versionName
            testInstrumentationRunner rootProject.ext.android.testInstrumentationRunner
        }
        ......
    }
    dependencies {
        implementation fileTree(include: ['*.jar'], dir: 'libs')
    //    implementation 'androidx.core:core-ktx:1.7.0'
    //    implementation 'androidx.appcompat:appcompat:1.6.1'
    //    implementation
    //
    //    testImplementation 'junit:junit:4.13.2'
    //    androidTestImplementation 'androidx.test.ext:junit:1.1.5'
    //    androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
        implementation rootProject.ext.dependencies.coreKtx
        implementation rootProject.ext.dependencies.appcompat
        implementation rootProject.ext.dependencies.material
        testImplementation rootProject.ext.dependencies.junit
        androidTestImplementation rootProject.ext.dependencies.testJunit
        androidTestImplementation rootProject.ext.dependencies.espresso
    }
    

    需求注意的是,咱们在编写代码的时分,是没有代码主动补全的。所以得小心翼翼,有必要要和「config.gradle」文件里边的名字向一致。

注意事项

  • 首要便是这种方法在coding的时分,是没有代码补全的(只有输入过的,才会有提示),咱们需求保证咱们的名字一致
  • 咱们在添加依靠的时分,在「config.gradle」里边添加完之后,记得在对应的module里边的「build.gradle」里边添加对应的指向代码。

总结

以上便是本篇文章的全部内容,总结起来其实过程不多,也就三步。但是需求注意的是细节。需求坚持写入的依靠与「config.gradle」文件一致,而且未写过的词,是不会有代码主动补全的。

另外本篇文章是本文归于 《一款基于MVP架构的快速使用开发结构,kotlin版别》 的扩展文章,所以会一步一步说得比较具体一点。大家可以挑要点跳过阅读。

Android - 统一依赖管理(config.gradle)