天天看點

【Android Gradle 插件】Android 依賴管理 ④ ( 常用依賴配置分析 | implementation 依賴作用 | api 依賴作用 | compileOnly 依賴作用 )

文章目錄

  • ​​一、compile 依賴作用​​
  • ​​二、implementation 依賴作用​​
  • ​​三、api 依賴作用​​
  • ​​四、compileOnly 依賴作用​​
  • ​​五、annotationProcessor 依賴作用​​
  • ​​六、lintChecks 依賴作用​​

在本篇部落格中逐一分析以下依賴配置 :

  • implementation
  • api
  • compileOnly
  • runtimeOnly
  • annotationProcessor
  • lintChecks
  • lintPublish
  • apk
  • compile
  • provided

Android 依賴參考文檔 : ​​https://developer.android.google.cn/studio/build/dependencies​​

一、compile 依賴作用

compile 依賴作用:

  • 編譯打包 : 為 自己的項目子產品 添加依賴 , 該依賴會參與到 編譯 建構過程 , 并且會 打包到 Apk 檔案 中 ;
  • 依賴傳遞 : 如果其它工程依賴本子產品 , 則會 将依賴傳遞到其它工程 中 ;

示例 : A 項目 中使用 compile 依賴 B 依賴庫 , 即 A 在 編譯建構時需要 B 依賴庫 , 最終 B 依賴庫會打包到 A 項目的 Apk 檔案中 ;

如果 C 項目 依賴 A 項目 , 由于 compile 配置會 傳遞依賴 , C 項目也需要将 B 依賴庫導入到自己的依賴中 , 這就使得 建構效率 變低 ;

已廢棄 : 該配置已經 廢棄 , 使用 api 依賴 替代 ; 該依賴在沒有廢棄時使用頻率最高 ;

由于依賴傳遞建構效率低 : compile 依賴 的 建構效率 會 非常低 , 建構時會 不停的檢查依賴樹 , 發現依賴傳遞後 , 還要 添加依賴的依賴

二、implementation 依賴作用

implementation 依賴作用 :

  • 編譯打包 : 使用 implementation 添加的依賴 , 會 參與到 編譯過程 , 并會 打包到 Apk 檔案中 ;
  • 不會傳遞 : 此類依賴 , 不會傳遞給其它子產品 ;

示例 : A 項目 中使用 compile 依賴 B 依賴庫 , 即 A 在 編譯建構時需要 B 依賴庫 , 最終 B 依賴庫會打包到 A 項目的 Apk 檔案中 ;

如果 C 項目 依賴 A 項目 , 由于 implementation 配置不會傳遞依賴 , C 項目是不知道 A 項目的 B 依賴庫的 , 也無法通路 B 依賴庫 ;

如果使用 compile 或者 api 添加依賴 , 則會有大量的依賴傳遞 , 建構效率 會 非常低 , 建構時會 不停的檢查依賴樹 , 發現依賴傳遞後 , 還要 添加依賴的依賴

三、api 依賴作用

api 依賴作用 : 與 compile 依賴 作用類似 ,

  • 編譯打包 : 依賴會參與到 編譯 建構過程 , 并且會 打包到 Apk 檔案 中 ;
  • 依賴傳遞 : 如果其它工程依賴本子產品 , 則會 将依賴傳遞到其它工程 中 ;

使用場景 : 應用中使用的 基礎依賴庫

api 依賴弊端 : 使用 api 依賴時要特别小心 , 由于這種 依賴會進行傳遞 , 如果修改了這個依賴庫 , 沿途所有依賴與該庫的項目子產品 ,會極大增加編譯建構時間 , 能不用就不用 ;

推薦使用 implementation 依賴 代替 api 或 compile 依賴 ;

盡量不使用 api 或 compile 依賴 , 經常使用的是 implementation 依賴 ;

四、compileOnly 依賴作用

compileOnly 依賴作用 :

  • 編譯過程 : 依賴隻會 添加到編譯路徑中 , 參與 編譯 建構過程 , 但是不會 打包到 Apk 檔案 中 ;
  • 作用時機 : 該類型依賴 , 隻在編譯過程中做一些輔助類的工作 , 在工程中沒有使用該依賴庫 ;

compileOnly 依賴 的作用與 已廢棄的 provided 依賴 類似 , 都是 将依賴庫添加到編譯路徑中 ;

在 根目錄的 build.gradle 頂層建構腳本 中的 buildScript 腳本塊 中 , 使用了 classpath 依賴 , 該類型的依賴隻應用在 buildScript 腳本塊 , 其作用也是 将依賴庫添加到編譯路徑中

classpath 依賴 隻用于 Gradle 運作時 為 Gradle 建構過程添加依賴 , compileOnly 依賴 和 provided 依賴 是 編譯時 為工程添加的依賴 ;

五、annotationProcessor 依賴作用

annotationProcessor 依賴作用 : 該依賴用于設定 注解處理器 依賴 , 在 APT ( Annotation Processing Tool ) 注解處理工具

可參考 ​​Android APT​​ 專欄 ;

注解處理器依賴處理流程 :

首先 , 在 程式中添加注解 ;

然後 , 在 Gradle 建構中配置注解處理器

最後 , 運作建構過程中 , 在注解處理器中 , 處理一些編譯時操作的内容

注解處理器依賴示例 :

dependencies {
    annotationProcessor 'com.google.auto.service:auto-service:1.0-rc4'
    compileOnly 'com.google.auto.service:auto-service:1.0-rc3'
}      

參考 ​​【Android APT】注解處理器 ( 配置注解依賴、支援的注解類型、Java 版本支援 )​​ 部落格 ;

六、lintChecks 依賴作用