理解 Android 新的依赖方式

简评:Android 团队在 Android Studio 3.0 中给我们带来了非常多的改变,其中一点就是对项目依赖方式的改进。这篇文章就将详细介绍下这项改进。

首先,我们来看这样一种情况:


一个 App 工程往往是由许多互相依赖的 module 所组成,对于处于最底层、最基础的 module,有两种可能的变化:

  1. Implementation change: 内部代码变更,但模块的外部接口不变。
  2. Application binary interface (ABI) change: 外部接口修改。

Note: 下面重新编译的模块将用红色显示。

Implementation change

因为 module 的外部接口没有改变,所以 Gradle 只会重新编译变更的 module,其他依赖它的 module 则不会重新编译。如图所示:

ABI change

如果模块的外部接口发生了改变,那么所有依赖了该 module 的其他 module 都需要重新编译,这就使得编译时间变长了。


因此,这里就是一个可以优化的地方,Android Gradle Plugin 3.0 就想解决这个问题。

如果,你已经用上了 Android Studio 3.0 Preview 的话,就会发现在 build.gradle 中 api 和 implementation 已经取代了曾经的 compile。

  • api:和 compile 的作用一样,当前 module 会暴露其依赖的其他 module 内容。
  1. implementation:只在内部使用了该 module,不会向外部暴露其依赖的 module 内容。

所以,我们可以为特定 module 选择 implementation 关键字来加快 gradle 构建速度。

dependencies {
  // recompile this module and all modules using this one
  // when legofy interface is modified
  api project(':legofy')

  // only recompile this module when landscapevideocamera interface is modified
  implementation project(':landscapevideocamera:1.0.0')
}

更多信息,大家可以阅读官方的迁移指南

原文:Implementation vs API dependency
延伸阅读:
探究在 TextView 中显示 HTML 的正确方法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,080评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,072评论 19 139
  • 升级到 Android studio 3.0版本会使多Module工程的构建速度加快很多。不幸的是,这也带来了Gr...
    vb12阅读 4,245评论 1 2
  • 最近发现如果将手机系统的字体设置为大字体,应用中的字体将跟随系统变大,而布局大部分我们根据设计出图写死了大小,这就...
    爺珍爱那颗心阅读 9,772评论 0 0
  • 我以为我不丑 可是我拍出来的照片自己都看不下去 我以为我不笨 可是我连最基本的东西都不懂 我以为我不懒 可是我连动...
    酸_柠檬阅读 2,166评论 0 0

友情链接更多精彩内容