依賴項配置
在 dependencies 代碼塊內(nèi),您可以從多種不同的依賴項配置中選擇其一(如上面所示的 implementation)來聲明庫依賴項。每種依賴項配置都向 Gradle 提供了有關如何使用該依賴項的不同說明。下表介紹了您可以對 Android 項目中的依賴項使用的各種配置。此表還將這些配置與自 Android Gradle 插件 3.0.0 起廢棄的配置進行了比較。
| 配置 | 行為 |
|---|---|
implementation |
Gradle 會將依賴項添加到編譯類路徑,并將依賴項打包到 build 輸出。不過,當您的模塊配置 implementation 依賴項時,會讓 Gradle 了解您不希望該模塊在編譯時將該依賴項泄露給其他模塊。也就是說,其他模塊只有在運行時才能使用該依賴項。使用此依賴項配置代替 api 或 compile(已廢棄)可以顯著縮短構(gòu)建時間,因為這樣可以減少構(gòu)建系統(tǒng)需要重新編譯的模塊數(shù)。例如,如果 implementation 依賴項更改了其 API,Gradle 只會重新編譯該依賴項以及直接依賴于它的模塊。大多數(shù)應用和測試模塊都應使用此配置。 |
api |
Gradle 會將依賴項添加到編譯類路徑和 build 輸出。當一個模塊包含 api 依賴項時,會讓 Gradle 了解該模塊要以傳遞方式將該依賴項導出到其他模塊,以便這些模塊在運行時和編譯時都可以使用該依賴項。 此配置的行為類似于 compile(現(xiàn)已廢棄),但使用它時應格外小心,只能對您需要以傳遞方式導出到其他上游消費者的依賴項使用它。 這是因為,如果 api 依賴項更改了其外部 API,Gradle 會在編譯時重新編譯所有有權(quán)訪問該依賴項的模塊。 因此,擁有大量的 api 依賴項會顯著增加構(gòu)建時間。 除非要將依賴項的 API 公開給單獨的模塊,否則庫模塊應改用 implementation 依賴項。 |
compileOnly |
Gradle 只會將依賴項添加到編譯類路徑(也就是說,不會將其添加到 build 輸出)。如果您創(chuàng)建 Android 模塊時在編譯期間需要相應依賴項,但它在運行時可有可無,此配置會很有用。 如果您使用此配置,那么您的庫模塊必須包含一個運行時條件,用于檢查是否提供了相應依賴項,然后適當?shù)馗淖冊撃K的行為,以使該模塊在未提供相應依賴項的情況下仍可正常運行。這樣做不會添加不重要的瞬時依賴項,因而有助于減小最終應用的大小。 此配置的行為類似于 provided(現(xiàn)已廢棄)。注意:您不能將 compileOnly 配置與 AAR 依賴項配合使用。 |
runtimeOnly |
Gradle 只會將依賴項添加到 build 輸出,以便在運行時使用。也就是說,不會將其添加到編譯類路徑。 此配置的行為類似于 apk(現(xiàn)已廢棄)。 |
annotationProcessor |
如需添加對作為注解處理器的庫的依賴,您必須使用 annotationProcessor 配置將其添加到注解處理器的類路徑。這是因為,使用此配置可以將編譯類路徑與注解處理器類路徑分開,從而提高 build 性能。如果 Gradle 在編譯類路徑上找到注解處理器,則會禁用避免編譯功能,這樣會對構(gòu)建時間產(chǎn)生負面影響(Gradle 5.0 及更高版本會忽略在編譯類路徑上找到的注解處理器)。如果 JAR 文件包含以下文件,則 Android Gradle 插件會假定依賴項是注解處理器:META-INF/services/javax.annotation.processing.Processor如果插件檢測到編譯類路徑上包含注解處理器,則會產(chǎn)生 build 錯誤。注意:Kotlin 項目應使用 kapt 聲明注解處理器依賴項。 |
lintChecks |
使用此配置可以添加您希望 Gradle 在構(gòu)建項目時執(zhí)行的 lint 檢查。注意:使用 Android Gradle 插件 3.4.0 及更高版本時,此依賴項配置不再將 lint 檢查打包在 Android 庫項目中。如需將 lint 檢查依賴項包含在 AAR 庫中,請使用下面介紹的 lintPublish 配置。 |
lintPublish |
在 Android 庫項目中使用此配置可以添加您希望 Gradle 編譯成 lint.<wbr style="box-sizing: inherit;">jar 文件并打包在 AAR 中的 lint 檢查。這會使得使用 AAR 的項目也應用這些 lint 檢查。如果您之前使用 lintChecks 依賴項配置將 lint 檢查添加到已發(fā)布的 AAR 中,則需要遷移這些依賴項以改用 lintPublish 配置。 |
apk |
Gradle 只會將依賴項添加到 build 輸出,以便在運行時使用。也就是說,不會將其添加到編譯類路徑。 此配置已廢棄(在 AGP 1.0-4.2 中可用)。 |
compile |
Gradle 會將依賴項添加到編譯類路徑和 build 輸出,并將依賴項導出到其他模塊。此配置已廢棄(在 AGP 1.0-4.2 中可用)。 |
provided |
Gradle 只會將依賴項添加到編譯類路徑(也就是說,不會將其添加到 build 輸出)。此配置已廢棄(在 AGP 1.0-4.2 中可用)。 |