Android Gradle 外掛程式 3.3.0 版 (2019 年 1 月)

這個版本的 Android 外掛程式須使用下列項目:

3.3.3 版 (2020 年 7 月)

本次要更新版本支援新預設設定的相容性,以及 Android 11 套件瀏覽權限的功能。

詳情請參閱 4.0.1 版本資訊

3.3.2 版 (2019 年 3 月)

這個次要更新版本支援 Android Studio 3.3.2 版,並提供多項錯誤修正和效能改善項目。如要查看重要錯誤修正清單,請參閱版本更新網誌上的相關文章。

3.3.1 版 (2019 年 2 月)

這個次要更新版本支援 Android Studio 3.3.1 版,並提供多項錯誤修正和效能改善項目。

新功能

  • 改進類別路徑同步處理作業:Android Gradle 外掛程式在解析執行階段和編譯時間類別路徑的依附元件時,會嘗試針對出現在多個類別路徑的依附元件,修正某些下游版本衝突問題。

    舉例來說,當執行階段類別路徑內含程式庫 A 2.0 版,而編譯類別路徑內含程式庫 A 1.0 版,此時外掛程式會自動將編譯類別路徑內的依附元件更新為程式庫 A 2.0 版,防止發生錯誤。

    不過,假如執行階段類別路徑內含程式庫 A 1.0 版,而編譯類別路徑內含程式庫 A 2.0 版,則外掛程式不會將編譯類別路徑的依附元件降級為程式庫 A 1.0 版,因此您會收到錯誤訊息。詳情請參閱「修正類別路徑之間的衝突」一節。

  • 改善使用註解處理工具時的漸進式 Java 編譯功能:這項更新改善了使用註解處理工具時對漸進式 Java 編譯的支援功能,從而縮短建構時間。

    注意:這項功能與 Gradle 4.10.1 以上版本相容,但 Gradle 5.1 版除外 (原因請參閱 Gradle 問題 8194)。

    • 針對使用 Kapt 的專案 (多數僅使用 Kotlin 的專案以及 Kotlin-Java 混合型專案):無論您是否使用資料繫結或 retro-lambda 外掛程式,系統都會啟用漸進式 Java 編譯功能。由 Kapt 工作進行的註解處理作業尚非漸進式。

    • 針對未使用 Kapt 的專案 (僅使用 Java 的專案):如果您使用的註解處理工具皆可支援漸進式註解處理,則系統預設會啟用漸進式 Java 編譯功能。如要監控漸進式註解處理工具的採用情形,請參閱 Gradle 問題 5277

      不過,要是有一或多個註解處理工具不支援漸進式建構作業,系統便不會啟用漸進式 Java 編譯功能。您可以改為在 gradle.properties 檔案中加入以下標記:

      android.enableSeparateAnnotationProcessing=true
                  

      加入這個標記後,Android Gradle 外掛程式便會在另一個獨立的工作中執行註解處理工具,讓 Java 編譯工作能夠以漸進方式執行。

  • 在使用過時 API 時提供更完善的偵錯資訊:現在當外掛程式偵測到您使用的是不再受支援的 API 時,可以提供更詳細的資訊來協助您判斷使用該 API 的位置。如果想查看這類額外資訊,您必須在專案的 gradle.properties 檔案中加入以下內容:

              android.debug.obsoleteApi=true
            

    您也可以透過指令列傳送 -Pandroid.debug.obsoleteApi=true,啟用這個標記。

  • 您可以透過指令列對功能模組執行檢測設備測試。

行為變更

  • 延遲工作設定:外掛程式現在會使用新的 Gradle 工作建立 API,避免為目前建構作業不需要完成的工作 (或不在執行工作圖上的工作) 執行初始化和設定工作。舉例來說,假設您有多個建構變數 (例如「release」和「debug」建構變數),且要建構應用程式的「debug」版本,則外掛程式會避免為應用程式的「release」版本執行初始化和設定工作。

    呼叫 Variants API 中的某些較舊的方法 (如 variant.getJavaCompile()) 時,系統可能仍會強制執行工作設定。為確保建構作業已針對延遲工作設定進行最佳化,請叫用會改為傳回 TaskProvider 物件的新方法,例如 variant.getJavaCompileProvider()

    如果您要執行自訂建構工作,建議您瞭解如何根據新的 Gradle 工作建立 API 進行調整

  • 現在針對特定建構類型設定 useProguard false 時,外掛程式不會使用 ProGuard,而是使用 R8 來縮減及模糊化應用程式的程式碼和資源。如要進一步瞭解 R8,請參閱 Android 開發人員網誌的這篇網誌文章

  • 加快程式庫專案的 R 類別產生程序:先前 Android Gradle 外掛程式會逐一為專案內的所有依附元件產生 R.java 檔案,再跟應用程式的其他類別一起編譯這些 R 類別。外掛程式現在會產生 JAR,其中直接含有應用程式編譯過的 R 類別,無須先建構 R.java 中繼類別。這項最佳化功能有望大幅改善內含多個程式庫子專案及依附元件的專案建構效能,同時還能提升 Android Studio 建立索引的速度。

  • 建構 Android App Bundle 時,由該應用程式套件產生且指定 Android 6.0 (API 級別 23) 以上版本的 APK,現在預設會加入原生資料庫的未壓縮版本。這項最佳化功能可避免讓裝置發生需要建立資料庫副本的情形,藉此減少應用程式的磁碟占用量,如果您想停用這項最佳化功能,請在 gradle.properties 檔案中加入以下內容:

    android.bundle.enableUncompressedNativeLibs = false
            
  • 外掛程式會強制執行部分第三方外掛程式的最低需求版本。

  • 單一變數專案同步處理:如要讓 Android Studio 瞭解專案結構,將專案與建構設定進行同步處理是相當重要的步驟。不過,對大型專案而言,這項程序可能相當耗時。如果專案使用多個建構變數,您現在可以只同步處理目前所選的變數,藉此最佳化專案同步處理作業。

    如要啟用這項最佳化功能,您必須使用 Android Studio 3.3 以上版本搭配 Android Gradle 外掛程式 3.3.0 以上版本。假如您符合這些需求條件,IDE 會在您同步處理專案時提示您啟用這項最佳化功能。此外,新專案也會預設啟用這項最佳化功能。

    如要手動啟用這項最佳化功能,請依序點選「File」>「Settings」>「Experimental」>「Gradle」(在 Mac 上應依序點選「Android Studio」>「Preferences」>「Experimental」>「Gradle」),接著勾選「Only sync the active variant」核取方塊。

    注意:這項最佳化功能可完整支援包含 Java 和 C++ 語言的專案,也可對 Kotlin 語言提供部分支援。對包含 Kotlin 內容的專案啟用最佳化功能時,Gradle 同步處理會在內部改回使用完整的變數。

  • 自動下載缺少的 SDK 套件:我們已加強這項功能,使其支援 NDK。詳情請參閱「透過 Gradle 自動下載缺少的套件」一節。

修正錯誤

  • Android Gradle 外掛程式 3.3.0 版修正了下列問題:

    • 儘管已啟用 Jetifier,建構程序還是會呼叫 android.support.v8.renderscript.RenderScript,而不是 AndroidX 版本
    • 由於 androidx-rs.jar 內含靜態封裝的 annotation.AnyRes 而發生衝突
    • 使用 RenderScript 時,不再需要手動在 build.gradle 檔案中設定建構工具版本了