关于android:Kotlin-buildSrc更好的管理Gadle依赖

2次阅读

共计 4035 个字符,预计需要花费 11 分钟才能阅读完成。

为了充分利用 Android Plugin for Gradle 3.0+ 的长处,将 Android 我的项目拆分成多个 module 的做法越来越常见。然而,随着 module 数量的增多,咱们很快就会遇到依赖治理的凌乱问题。

治理 Gradle 依赖的三种不同办法:

  • 手动治理
  • 应用 Google 举荐的“ext”
  • Kotlin + buildSrc

1、手动治理

这是一种大多数人在采纳的治理依赖的办法,但每次降级依赖库时都须要做大量的手动更改。

module_a/build.gradle
implementation "com.android.support:support-annotations:27.0.2"
implementation "com.android.support:appcompat-v7:27.0.2"
implementation "com.squareup.retrofit2:retrofit:2.3.0"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.3.0"
implementation "io.reactivex.rxjava2:rxjava:2.1.9"
module_b/build.gradle
implementation "com.android.support:support-annotations:27.0.2"
implementation "com.android.support:appcompat-v7:27.0.2"
implementation "com.squareup.retrofit2:retrofit:2.3.0"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.3.0"
implementation "io.reactivex.rxjava2:rxjava:2.1.9"

这里存在许多反复的配置,而且当你的我的项目有很多 module 时很难治理依赖库的版本更新。

Google 举荐:应用 gradle 的 extra 属性

Google 在 Android 官网文档中举荐这种治理依赖的办法。许多我的项目例如 ButterKnifePicasso 等都在应用这种办法。

此办法十分实用于更新 support library 的版本,因为每个 support library 都具备雷同的版本号,你只须要在一个中央更改它就行了。Retrofit 等其它第三方库也是如此。

Root-level build.gradle
ext {
  versions = [
    support_lib: "27.0.2",
    retrofit: "2.3.0",
    rxjava: "2.1.9"
  ]
  libs = [support_annotations: "com.android.support:support-annotations:${versions.support_lib}",
    support_appcompat_v7: "com.android.support:appcompat-v7:${versions.support_lib}",
    retrofit :"com.squareup.retrofit2:retrofit:${versions.retrofit}",
    retrofit_rxjava_adapter: "com.squareup.retrofit2:adapter-rxjava2:${versions.retrofit}",
    rxjava: "io.reactivex.rxjava2:rxjava:${versions.rxjava}"
  ]
}
module_a/build.gradle
implementation libs.support_annotations
implementation libs.support_appcompat_v7
implementation libs.retrofit
implementation libs.retrofit_rxjava_adapter
implementation libs.rxjava
module_b/build.gradle
implementation libs.support_annotations
implementation libs.support_appcompat_v7
implementation libs.retrofit
implementation libs.retrofit_rxjava_adapter
implementation libs.rxjava

这种办法是手动治理的一大提高,然而短少 IDE 的反对,更精确的说是在更新依赖库的时候 IDE 不能主动补全。

Kotlin + buildSrc == Android Studio Autocomplete 😎 🎉

您须要在您的我的项目里创立一个 buildSrc 模块,而后编写 kotlin 代码来治理依赖库,使得 IDE 反对主动补全。

Gradle 文档中有这样一段话:

当你运行 Gradle 时,它会查看我的项目中是否存在一个名为 buildSrc 的目录。而后 Gradle 会主动编译并测试这段代码,并将其放入构建脚本的类门路中。您不须要提供任何进一步的操作提醒。

你只须要在 buildSrc module 中新建两个文件:

  • build.gradle.kts
  • 编写 Kotlin 代码的文件 (本文中是指Dependencies.kt)

buildSrc/build.gradle.kts:
plugins {`kotlin-dsl`}

buildSrc/src/main/java/Dependencies.kt

object Versions {
    val support_lib = "27.0.2"
    val retrofit = "2.3.0"
    val rxjava = "2.1.9"
}

object Libs {val support_annotations = "com.android.support:support-annotations:${Versions.support_lib}"
 val support_appcompat_v7 = "com.android.support:appcompat-v7:${Versions.support_lib}"
 val retrofit = "com.squareup.retrofit2:retrofit:${Versions.retrofit}"
 val retrofit_rxjava_adapter = "com.squareup.retrofit2:adapter-rxjava2:${Versions.retrofit}"
 val rxjava = "io.reactivex.rxjava2:rxjava:${Versions.rxjava}"
}

通过下面两个步骤后,执行一次 Gradle Sync 工作,当初咱们能够在 Android Studio 中拜访 Dependencies.kt 中任何值了。

看起来后果与“ext”十分类似,然而它反对主动补全和单击跳转。

module_a/build.gradle
implementation Libs.support_annotations
implementation Libs.support_appcompat_v7
implementation Libs.retrofit
implementation Libs.retrofit_rxjava_adapter
implementation Libs.rxjava
module_a/build.gradle
implementation Libs.support_annotations
implementation Libs.support_appcompat_v7
implementation Libs.retrofit
implementation Libs.retrofit_rxjava_adapter
implementation Libs.rxjava

结束语

我强烈推荐您应用 “Kotlin + buildSrc” 的办法。它反对主动补全和单击跳转,使得您无需在文件之间手动来回切换,不便你更好的治理 Gradle 依赖。

入手实际:

新建的 module 名称必须为buildSrc

一开始我依照作者原文的形容,在 Android Studio 里右键单击我的项目,New 出一个名为 buildSrcAndroid Library,试了好几遍都提醒 “Gradle sync failed: Plugin with id 'com.android.library' not found” 的谬误。

起初我参考这里的做法,手动创立了 buildSrc 这个模块。步骤如下:

  • 1、在我的项目根目录下新建一个名为 buildSrc 的文件夹(与我的项目里的 app 文件夹同级)。
  • 2、在 buildSrc 文件夹里创立名为 build.gradle.kts 的文件,文件内容参考之前的形容。
  • 3、在 buildSrc 文件夹里创立 src/main/java 文件夹,如下图所示。并在该文件夹下创立 Dependencies.kt 文件,文件内容参考之前的形容。

  1. build 一遍你的我的项目,而后重启你的 Android Studio,我的项目里就会多出一个名为buildSr c 的 module。

Android 高级开发零碎进阶笔记、最新面试温习笔记 PDF,我的 GitHub

文末

您的点赞珍藏就是对我最大的激励!
欢送关注我,分享 Android 干货,交换 Android 技术。
对文章有何见解,或者有何技术问题,欢送在评论区一起留言探讨!

正文完
 0