Gradle3.0新指令api、provided、implementation等對比

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時有效。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容