为了充分利用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_annotationsimplementation libs.support_appcompat_v7implementation libs.retrofitimplementation libs.retrofit_rxjava_adapterimplementation libs.rxjava
module_b/build.gradle
implementation libs.support_annotationsimplementation libs.support_appcompat_v7implementation libs.retrofitimplementation libs.retrofit_rxjava_adapterimplementation 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_annotationsimplementation Libs.support_appcompat_v7implementation Libs.retrofitimplementation Libs.retrofit_rxjava_adapterimplementation Libs.rxjava
module_a/build.gradle
implementation Libs.support_annotationsimplementation Libs.support_appcompat_v7implementation Libs.retrofitimplementation Libs.retrofit_rxjava_adapterimplementation 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,我的项目里就会多出一个名为buildSrc的module。

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

文末

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