Android Gradle 外掛程式 3.1.0 版 (2018 年 3 月)

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

  • Gradle 4.4 以上版本。

    詳情請參閱「更新 Gradle」一節。

  • 建構工具 27.0.3 以上版本。

    請注意,您不再需要使用 android.buildToolsVersion 屬性指定建構工具的版本,外掛程式預設會使用最低需求版本。

全新 DEX 編譯器 D8

Android Studio 現在預設會使用名為 D8 的全新 DEX 編譯器。DEX 編譯是指將 .class 位元碼轉換為 .dex 位元碼,以供 Android 執行階段 (或舊版 Android 的 Dalvik) 使用的程序。與先前名為 DX 的編譯器相較,D8 的編譯速度更快,且輸出的 DEX 檔案更小,同時還能提供相同等級或更優異的應用程式執行階段效能。

D8 應該不會改變您日常的應用程式開發工作流程。不過,如果發生任何和新編譯器有關的問題,請回報錯誤。如要暫時停用 D8 並使用 DX,可以在專案的 gradle.properties 檔案中加入以下內容:

      android.enableD8=false
    

如果專案使用 Java 8 語言功能,系統預設會啟用漸進式脫糖功能。如要停用此功能,可以在專案的 gradle.properties 檔案內指定以下內容:

      android.enableIncrementalDesugaring=false.
    

預先發布版使用者:請注意,如果您已在使用 D8 的預先發布版,D8 現在會使用 SDK 建構工具 (而非 JDK) 內的程式庫進行編譯。因此,假如您要存取的 API 位於 JDK 內,但不在 SDK 建構工具程式庫內,便會發生編譯錯誤。

行為異動

  • 如要建構多個 APK,且每個 API 分別指定不同的 ABI,則在預設情況下,外掛程式不會再為下列 ABI 產生 APK:mipsmips64armeabi

    如要建構指定這些 ABI 的 APK,您必須使用 NDK r16b 以下版本,並在 build.gradle 檔案中指定 ABI,如下所示:

              splits {
                  abi {
                      include 'armeabi', 'mips', 'mips64'
                      ...
                  }
              }
            
              splits {
                  abi {
                      include("armeabi", "mips", "mips64")
                      ...
                  }
              }
            
  • 現在 Android 外掛程式的建構快取會收回超過 30 天前的快取項目了。

  • "auto" 傳送到 resConfig 不再自動選擇封裝 APK 所用的字串資源。如果繼續使用 "auto",外掛程式會封裝應用程式和依附元件所提供的所有字串資源。因此,您應該改為逐一指定要讓外掛程式封裝至 APK 的語言代碼。

  • 由於本機模組無法依附應用程式的測試 APK,因此透過 androidTestApi 設定 (而不是 androidTestImplementation) 為檢測設備測試新增依附元件,會導致 Gradle 發出以下警告:

            WARNING: Configuration 'androidTestApi' is obsolete
            and has been replaced with 'androidTestImplementation'
            
            WARNING: Configuration 'androidTestApi' is obsolete
            and has been replaced with 'androidTestImplementation'
            

修正項目

  • 修正問題:Android Studio 無法正確識別複合式建構中的依附元件。
  • 修正問題:在單一建構作業中多次載入 Android 外掛程式會發生專案同步處理錯誤,例如在處理多個子專案的情況下,每個子專案的建構指令碼類別路徑內都包含該 Android 外掛程式,就會發生錯誤。