一 3.0之前的6种方式
- 共发现6中方式
Compile,Provided,APK,Test compile,Debug compile,Release compile
1.1 Compile
对所有的build type以及favlors 编译并且打包 到apk
1.2 Provided
对所有的build type以及favlors 只编译,不打包到apk 类似eclipse中的external-libs
1.3 APK
只会打包到apk,不参与编译,比如引用jar中的类或者方法, 编译时就会报错
1.4 Test compile
仅对 单元测试的代码和打包的测试APK 有效,而对debug或者release apk包无效
1.5 Debug compile
仅对 debug模式的编译和打包的debug APK 有效,而对test或者debug apk打包无效
1.6 Release compile
仅对 Release模式的编译和打包的Release APK 有效,而对test或者debug apk打包无效
二 3.0之后新增的两种方式
新建一个项目时,会在 Moudle 中发现 dependencies 中有所变化, compile变成了implementation,如下所示
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
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'
}
新版本 Gradle plugin 3.0 中 讲明 compile 已过时,替换它的是implementation 和 api 两个关键字,其中api完全等同于compile, 而implementation 和 api/compile的区别如下:
2.1 api关键字
等同于compile, 用api指令编译,Piccaso依赖对app Module 是可见的,即等同app Module可以使用Piccaso依赖
2.2 implementation 关键字
特点是将该依赖隐藏在内部,而不对外部公开
用implement指令编译, Piccaso依赖对app Module 是不可见的,app Module不可以直接使用Piccaso
2.2.1 implementation 的两个好处
- 提高编译速度
- 对外隐藏不必要的接口
2.2.2 implementation 提高编译速度的原因:
大型项目一般含有多个 Moudle 模块, 比如改动 LibraryC 接口的相关代码
1 如果使用implement, 这时候编译只需要单独编译 LibraryA 模块就行
2 如果使用 api 或者旧时代的 compile,由于App Moudle 也可以访问到 LibraryC ,所以 App Moudle 部分也需要重新编译
2.2.3 Google IO 的建议
依赖首先设置为implement
如果无错,那就用implement , 这样会使编译速度有所增快
如果有错,那么使用api指令