• 原文地址:Kotlin + buildSrc for Better Gradle Dependency Management
  • 原文作者:Sam Edwards,Lead Android Engineer at Google Developer Expert for Android

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

管理Gradle依赖的三种不同方法:

  1. 手动管理
  2. 使用Google推荐的“ext”
  3. 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官方文档中推荐这种管理依赖的方法。许多项目例如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:${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中新建两个文件:

  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:${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 出一个名为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. build一遍你的项目,然后重启你的Android Studio,项目里就会多出一个名为buildSrc的module。

[译]Kotlin + buildSrc:更好的管理Gadle依赖相关推荐

  1. [译]Kotlin的独门秘籍Reified实化类型参数(上篇)

    翻译说明: 原标题: Getting Real with Kotlin's Reified Type Parameters 原文地址: https://typealias.com/guides/get ...

  2. [译]Kotlin中是应该使用序列(Sequences)还是集合(Lists)?

    翻译说明: 原标题: Sequences - a Pragmatic Approach 原文地址: https://proandroiddev.com/sequences-a-pragmatic-ap ...

  3. 计算机注册表管理,学会注册表几个常用的设置,更好地管理自己的电脑!

    注册表是Windows操作系统的核心数据库,存放着各种参数,直接控制着Windows的启动.硬件驱动程序的装载以及一些Windows应用程序的运行.从Microsoft Windows 95操作系统开 ...

  4. 使用日程安排自动化测试来更好地管理时间与资源

    简介:在一个自动化测试系统中按日程安排一项测试是实现在特定的日期和时间内执行任务的重要组成部分.它不但能够帮助您更有效地使用测试资源,而且能够帮助您监视测试结果.本文介绍了关于这方面一些应当考虑的事项 ...

  5. kotlin实现的简单个人账户管理APP(三) 自定义View仿支付宝的密码输入框/密码相关逻辑

    转载请注明出处:http://blog.csdn.net/a512337862/article/details/78874322 前言 1.本篇博客相关的项目介绍请参考基于kotlin实现的简单个人账 ...

  6. 哪种性格的人,更适合转管理?

    许多刚走上管理岗位的朋友,都有这样的困惑: 1.我比较内向,不适合做管理. 2.我不擅长演讲,没有领导才能. 3.我太谨小慎微了,做不好领导. 4.我太喜欢出风头,静不下心来做管理. 5.我太强势了, ...

  7. 【巨人的肩膀上制造世界】——2——Unity3D实用插件之QHierarchy,更方便的管理你的层级面板,全中文教程!

    [巨人的肩膀上制造世界]--2--Unity3D实用插件之QHierarchy,更方便的管理你的层级面板,全中文教程! 目录 1.博客介绍 2.QHierarchy介绍 3.QHierarchy操作详 ...

  8. 如何更好的管理图片文件

    如何更好的管理图片文件 一.引入 二.方法 1.无序堆放法 2.文件分隔法 3.图片分类法 4.图片合并法 结果 注意,本文所有方法全部为博主总结,如有错误请指出 一.引入 在编写游戏的时候,我们通常 ...

  9. 知更鸟 wordpress_如何通过StartBooking更好地管理WordPress中的在线预订

    知更鸟 wordpress Do you want to better manage online booking on your WordPress site? Many WordPress bus ...

最新文章

  1. IDC:2015年第四季度全球WLAN市场增幅最高
  2. windows批处理的感叹号和变量延迟扩展
  3. Python-random标准库知识小结
  4. python局部变量想作用于全局_python 局部和全局作用域
  5. HDU 5919 Sequence II 主席树
  6. 翻到几年前的代码,我惊了。
  7. [COM/ATL]组件、对象、MFC、ATL的区别
  8. 特征阻抗输入阻抗输出阻抗_软件阻抗说明
  9. iOS网络请求认证挑战
  10. 中国制造2025变革,背后的大数据来龙去脉
  11. JSP项目打开默认主页
  12. cisco2811路由器密码恢复
  13. 安卓手机如何使用第三方主题,制作专属自己喜好的主题
  14. adb shell error: device offline
  15. shopnc 设置mysql_shopnc 数据库配置
  16. word办公插件中的佼佼者,Word魔方
  17. INSERT INTO语句
  18. sqlplus连接到远程数据库
  19. 一次ES性能优化,我发现了搞大数据的真相……
  20. 暴力破解MD5密码[单线程]

热门文章

  1. ubuntu彻底卸载mysql并且重新安装
  2. c++数据结构之广义表
  3. constrain to margins
  4. [一个小问题]Mainfest配置文件的version问题小结
  5. 【听课笔记】国立交通大学《如何成功投稿国际科学期刊》 投稿准备+审稿流程剖析...
  6. iptables命令语法(3)
  7. windows 2003系统目前最完善最完美的安全权限方案(转)
  8. Java Pinyin4j(汉字转拼音)
  9. 黑客组织称7月将售新入侵工具 价格超2.2万美元
  10. hihoCoder挑战赛29