Android Studio3.0之前的6種依賴方式和3.0之後新增的兩種依賴方式
一 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
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指令