Android Gradle 外掛程式 3.4.0 版 (2019 年 4 月)

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

最低版本 預設版本 附註
Gradle 5.1.1 5.1.1 詳情請參閱「更新 Gradle」一節。使用 Gradle 5.0 以上版本時,預設的 Gradle Daemon 記憶體堆積大小會從 1 GB 降至 512 MB。這可能會導致建構效能迴歸。如要覆寫這項預設設定,請在專案的 gradle.properties 檔案中指定 Gradle Daemon 堆積大小。
SDK 版本工具 28.0.3 28.0.3 安裝設定 SDK 版本工具。

3.4.3 版 (2020 年 7 月)

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

詳情請參閱 4.0.1 版本資訊

3.4.2 版 (2019 年 7 月)

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

3.4.1 版 (2019 年 5 月)

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

新功能

  • 新的 Lint 檢查依附元件設定:我們已變更 lintChecks 的行為,並導入新的依附元件設定 lintPublish,讓您能精確掌控 Android 程式庫要封裝哪些 Lint 檢查項目。

    • lintChecks:此為現有設定,用於您只想在本機建構專案時執行的程式碼檢查項目。如果您先前是使用 lintChecks 依附元件設定,在已發布的 AAR 中加入 Lint 檢查項目,則您必須將這些依附元件改為使用如下所述的 lintPublish 新設定。
    • lintPublish:如要在已發布的 AAR 中加入 Lint 檢查項目,請在程式庫專案中使用這項新設定 (如下所示)。這表示使用該程式庫的專案現在也會套用這些程式碼檢查項目。

    以下程式碼範例會在本機 Android 程式庫專案中同時使用兩種依附元件設定。

    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks project(':lint')
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish project(':lintpublish')
    }
            
    dependencies {
      // Executes lint checks from the ':lint' project at build time.
      lintChecks(project(":lint"))
      // Packages lint checks from the ':lintpublish' in the published AAR.
      lintPublish(project(":lintpublish"))
        }
            
    • 一般來說,封裝和簽署工作的整體建構速度應該都能獲得提升。如果您發現這些工作發生效能迴歸現象,請回報問題

行為變更

  • Android 免安裝應用程式功能外掛程式淘汰警告:如果您仍在使用 com.android.feature 外掛程式建構免安裝應用程式,Android Gradle 外掛程式 3.4.0 版便會向您發出淘汰警告。如要確保您仍然可以透過未來版本的外掛程式建構免安裝應用程式,請遷移免安裝應用程式以便改用動態功能外掛程式,這個外掛程式也能讓您透過單一 Android App Bundle 發布安裝應用程式和免安裝應用程式體驗。

  • 預設啟用 R8:R8 將脫糖、縮減、模糊化、最佳化以及 DEX 處理整合為單一步驟,結果讓建構效能獲得大幅提升。R8 是在 Android Gradle 外掛程式 3.3.0 版導入,現在凡是使用外掛程式 3.4.0 以上版本的應用程式和 Android 程式庫專案都會預設啟用這項工具。

下圖概略說明導入 R8 之前的編譯程序。

在導入 R8 之前,ProGuard 是與 DEX 和脫糖不同的編譯步驟。

現在有了 R8,脫糖、縮減、模糊化、最佳化和 DEX 處理 (D8) 全都可透過單一步驟完成,如下圖所示。

透過 R8,您只要執行一個編譯步驟,就能進行脫糖、縮減、模糊化、最佳化和 DEX 處理。

提醒您,R8 能夠與現有 ProGuard 規則搭配運作,因此您可能不需要採取任何行動就能享有 R8 的好處。不過,由於這與專為 Android 專案設計的 ProGuard 是不同的技術,因此在進行縮減和最佳化時,可能會導致原先 ProGuard 不會移除的程式碼遭到移除。在這類罕見情況下,您可能必須新增額外規則,讓建構輸出內容保留該程式碼。

如果您在使用 R8 時遇到問題,請參閱 R8 相容性常見問題,看看是否有該問題的解決方案。如果當中沒有提供解決方案,請回報錯誤。您可以在專案的 gradle.properties 檔案中加入下列其中一行程式碼來停用 R8:

      # Disables R8 for Android Library modules only.
      android.enableR8.libraries = false
      # Disables R8 for all modules.
      android.enableR8 = false
      
    

注意:針對特定建構類型,如果您在應用程式模組的 build.gradle 檔案中將 useProguard 設為 false,則不論您是否有在專案的 gradle.properties 檔案中停用 R8,Android Gradle 外掛程式都會使用 R8 縮減該建構類型的應用程式程式碼。

  • ndkCompile 已淘汰:如果您嘗試使用 ndkBuild 編譯原生資料庫,將會收到建構錯誤。建議您改用 CMake 或 ndk-build,為專案新增 C 和 C++ 程式碼

已知問題

  • 目前尚未強制使用不重複的套件名稱,不過日後的外掛程式版本將會嚴格規定。在 Android Gradle 外掛程式 3.4.0 版中,只要在 gradle.properties 檔案中加入以下這一行,即可選擇使用檢查功能,以確認專案所宣告的是否為系統可接受的套件名稱。

              android.uniquePackageNames = true
              
            

    如要進一步瞭解如何透過 Android Gradle 外掛程式設定套件名稱,請參閱「設定應用程式 ID」一節。