共计 1429 个字符,预计需要花费 4 分钟才能阅读完成。
AndroidStudio 升级到 3.0 之后,gradle 版本也随之升级到了 3.0.0 版本。
classpath ‘com.android.tools.build:gradle:3.0.0’1 在新建一个 Android 工程的时候,build.gradle 中的依赖默认为 implementation,而不是之前的 compile。另外,gradle 3.0.0 版本以上,还有依赖指令 api。本文主要介绍下 implementation 和 api 的区别。
新建工程默认生成的 app 的 build.gradle 文件中的依赖:
dependencies {
implementation fileTree(include: [‘*.jar’], dir: ‘libs’)
implementation ‘com.android.support:appcompat-v7:26.1.0’
implementation ‘com.android.support.constraint:constraint-layout:1.0.2’
testImplementation ‘junit:junit:4.12’
androidTestImplementation ‘com.android.support.test:runner:1.0.1’
androidTestImplementation ‘com.android.support.test.espresso:espresso-core:3.0.1’
}12345678api 指令
完全等同于 compile 指令,没区别,你将所有的 compile 改成 api,完全没有错。
implementation 指令
这个指令的特点就是,对于使用了该命令编译的依赖,对该项目有依赖的项目将无法访问到使用该命令编译的依赖中的任何程序,也就是将该依赖隐藏在内部,而不对外部公开。
简单的说,就是使用 implementation 指令的依赖不会传递。例如,有一个 module 为 testsdk,testsdk 依赖于 gson:
implementation ‘com.google.code.gson:gson:2.8.2’1 这时候,在 testsdk 里边的 java 代码是可以访问 gson 的。
另一个 module 为 app,app 依赖于 testsdk:
implementation project(‘:testsdk’)1 这时候,因为 testsdk 使用的是 implementation 指令来依赖 gson,所以 app 里边不能引用 gson。
但是,如果 testsdk 使用的是 api 来引用 gson:
api ‘com.google.code.gson:gson:2.8.2’1 则与 gradle3.0.0 之前的 compile 指令的效果完全一样,app 的 module 也可以引用 gson。这就是 api 和 implementation 的区别。
建议
在 Google IO 相关话题的中提到了一个建议,就是依赖首先应该设置为 implementation 的,如果没有错,那就用 implementation,如果有错,那么使用 api 指令。使用 implementation 会使编译速度有所增快。
参考:
http://blog.csdn.net/soslinke…
https://zhuanlan.zhihu.com/p/…
https://stackoverflow.com/que…
http://blog.csdn.net/JF_1994/…