Android Studio3.0正式版已經(jīng)出來了,相比2.x的版本,Gradle版本也升級為了3.x,編譯速度提高了不少。
在gadle3.0之后,默認的依賴由之前的compile更改為implementation
-
對比表
Android Studio 2.X Android Studio 3.X apk runtimeOnly provided compileOnly compile api 沒有對應 implementation debugCompile debugImplementation releaseCompile releaseImplementation androidTestCompile androidTestImplementation -
api (compile)
- 依賴向上傳遞
- 若A api B, B api C,C module對A module可見
-
implementation (新指令: 具備依賴可見性)
依賴不向上傳遞
若A implementation B, B implementation C,C module對A module不可見
若A implementation B, B api C,C module對A module可見
功能同api,區(qū)別僅僅是增加了依賴可見性
-
compileOnly(provided)
- 只在編譯時有效,不會參與打包
- 若A implementation C,打包后apk(A + C);而A compileOnly C,打包后apk(A);該指令實質(zhì):A module假裝依賴了C module通過欺騙編譯器編譯時檢測以避免java.lang.ClassNotFoundException編譯報錯
- 使用情形
- A implementation C,B implementation C,打包時A module生成aar(A + C),B module生成aar(B + C)
- 若改成A implementation C,B compileOnlyC,打包時A module生成aar(A + C),B module生成aar(B)
- 最終apk包(A + B + C),結(jié)果一致
- 雖然aar(B)不真實依賴C module,但B module確實用到了C module的api。沒有運行時錯誤的原因:aar(A + C)與aar(B)合并生成apk,B module運行時找到并調(diào)用aar(A + C)中的C module
-
runtimeOnly(apk)
只在生成apk的時候參與打包,編譯時不會參與,很少用。
-
debugImplementation(debugCompile)
debugImplementation 只在debug模式的編譯和最終的debug apk打包時有效。
-
releaseImplementation(releaseCompile)
releaseImplementation 僅僅針對release 模式的編譯和最終的release apk打包。
-
androidTestImplementation(androidTestCompile)
androidTestImplementation 只在單元測試代碼的編譯以及最終打包測試apk時有效。