[译]Kotlin + buildSrc:更好的管理Gadle依赖

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官方文档中推荐这种管理依赖的方法。许多项目例如ButterKnife、Picasso等都在使用这种方法。

此方法非常适用于更新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: v e r s i o n s . s u p p o r t l i b " , s u p p o r t a p p c o m p a t v 7 : " c o m . a n d r o i d . s u p p o r t : a p p c o m p a t − v 7 : {versions.support_lib}", support_appcompat_v7: "com.android.support:appcompat-v7: versions.supportlib",supportappcompatv7:"com.android.support:appcompatv7:{versions.support_lib}”,
retrofit :“com.squareup.retrofit2:retrofit: v e r s i o n s . r e t r o f i t " , r e t r o f i t r x j a v a a d a p t e r : " c o m . s q u a r e u p . r e t r o f i t 2 : a d a p t e r − r x j a v a 2 : {versions.retrofit}", retrofit_rxjava_adapter: "com.squareup.retrofit2:adapter-rxjava2: versions.retrofit",retrofitrxjavaadapter:"com.squareup.retrofit2:adapterrxjava2:{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中新建两个文件:

  1. build.gradle.kts
  2. 编写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: V e r s i o n s . s u p p o r t l i b " v a l s u p p o r t a p p c o m p a t v 7 = " c o m . a n d r o i d . s u p p o r t : a p p c o m p a t − v 7 : {Versions.support_lib}" val support_appcompat_v7 = "com.android.support:appcompat-v7: Versions.supportlib"valsupportappcompatv7="com.android.support:appcompatv7:{Versions.support_lib}”
val retrofit = “com.squareup.retrofit2:retrofit: V e r s i o n s . r e t r o f i t " v a l r e t r o f i t r x j a v a a d a p t e r = " c o m . s q u a r e u p . r e t r o f i t 2 : a d a p t e r − r x j a v a 2 : {Versions.retrofit}" val retrofit_rxjava_adapter = "com.squareup.retrofit2:adapter-rxjava2: Versions.retrofit"valretrofitrxjavaadapter="com.squareup.retrofit2:adapterrxjava2:{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 出一个名为buildSrc的Android 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文件,文件内容参考之前的描述。
    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
    容参考之前的描述。
  4. 在buildSrc文件夹里创建src/main/java文件夹,如下图所示。并在该文件夹下创建Dependencies.kt文件,文件内容参考之前的描述。
    [外链图片转存中…(img-CrrqSdbl-1736901017414)]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值