Android Gradle Plugin API 更新

本頁會記錄 Android Gradle 外掛程式 (AGP) API 的淘汰與移除情形 瞭解如何據此更新程式碼。

API 淘汰與移除追蹤工具

下表以 AGP 版本為準,簡要列出 AGP 的 API 淘汰和移除時的影響。

API 已從 AGP 版本淘汰 已從 AGP 版本移除
Component.setAsmFramesComputationMode 7.2
Component.transformClassesWith 7.2
RenderScript 7.2
轉換 7.2 8.0

AGP 8.0

以下是 AGP 8.0 的重要 API 更新。

Transform API 已移除

從 AGP 8.0 開始,不再有Transform API。也就是說,com.android.build.api.transform 套件中所有類別都會遭到移除。

移除 Transform API 是為了提升建構效能。負責任 AI 技術的專案 使用 Transform API 會強制 AGP 針對 可能造成建構時間嚴重迴歸的問題另一個方式則是使用 Transform API 並與其他 Gradle 功能結合替換的 API 可讓您在不導入效能或建構項目的情況下輕鬆擴充 AGP 正確性問題。

替代 API

Transform API 無法完全取代;每種用途都有新的目標 API。所有替換 API 都位於 androidComponents {} 區塊中。上述 API 均可由 AGP 7.2 使用。

支援轉換位元碼

如要轉換位元碼,請使用 檢測 API。針對圖書館,你可以 只註冊本機專案類別的檢測;應用程式和測試 您可以選擇只註冊本地類別的檢測 包括本機和遠端依附元件等類別如要使用這個 API, 檢測設備在每個類別獨立執行,但 Classpath 中的類別 (請參閱 createClassVisitor()敬上 的說明)。這項限制可改善完整和漸進式建構作業的效能,並讓 API 途徑保持簡單。每個程式庫在準備就緒後就會平行檢測,而非所有編譯完成後。此外,單一類別中的變更 換言之,只有受影響的類別需要以漸進式的方式重新檢測 建構應用程式如需如何使用 Instrumentation API 的範例,請參閱 使用 ASM 轉換類別 AGP 方案

支援將產生的類別新增至應用程式

如要將其他產生的類別新增至應用程式,請搭配使用 Artifacts API 和 MultipleArtifact.ALL_CLASSES_DIRS。具體來說,請使用

artifacts.use(TaskProvider)
  .wiredWith(...)
  .toAppend(Artifact.Multiple)

MultipleArtifact.ALL_CLASSES_DIRS 將已產生的其他目錄附加至專案類別。成果 API 會自動選取獨特位置,以便輸出自訂工作。詳情請參閱 addToAllClasses 方案 以取得如何使用此 API 的範例

支援以整個計畫分析為基礎的轉換作業

如要根據整個程式分析實作轉換作業,所有類別都可以在單一工作中一起轉換。您應謹慎使用這個方法,因為建構效能成本比使用檢測 API 高得多。如果您的外掛程式使用這個 API,建議您進行轉換 選擇接受每個建構類型,讓應用程式開發人員 開發建構作業

如要註冊可以同時轉換所有類別的工作,Android Gradle 外掛程式 7.4 導入 Artifacts.forScope 也能使用 Google Cloud CLI 或 Compute Engine API如要在目前的專案中轉換所有類別,請使用 Artifacts.forScope.PROJECT。如要在目前的專案中轉換所有類別, 匯入的專案,以及所有外部依附元件使用 Artifacts.forScope.ALL。 以下程式碼顯示如何使用 Artifacts.forScope.ALL 註冊 會同時轉換所有類別的工作:

variant.artifacts.forScope(ScopedArtifacts.Scope.ALL)
    .use(taskProvider)
    .toTransform(
        ScopedArtifact.CLASSES,
        ModifyClassesTask::allJars,
        ModifyClassesTask::allDirectories,
        ModifyClassesTask::output,
    )

詳情請參閱 modifyProjectClasses 方案 舉例說明這個 API 的使用方式 customizeAgpDsl 方案 ,瞭解如何在 Android 建構類型中註冊自訂擴充功能。

如果您的用途不適用於任何 AndroidComponents API,請回報錯誤

有些常用的外掛程式已遷移完畢,可用於使用這些新的 API,包括 Firebase Performance Monitoring 外掛程式 (1.4.1 與 AGP 8.0 相容),以及 Hilt Gradle 外掛程式 (2.40.1 與 AGP 8.0 相容)。AGP 升級輔助程式也可協助專案開發人員視需要升級常用的外掛程式。

如果您透過第三方外掛程式使用 Transform API,請通知作者其外掛程式必須更新,才能搭配 AGP 8.0 適用的新版 API。

AGP 7.2

以下是 AGP 7.2 的重要 API 更新。

RenderScript 已淘汰

自 AGP 7.2 開始,已淘汰 RenderScript API。這些函式仍會繼續運作,但會叫用警示,並於日後的 AGP 版本中完全移除。如要瞭解如何從 RenderScript 轉換,請參閱「從 RenderScript 遷移」(Migrate from RenderScript)

Component.transformClassesWith」和「Component.setAsmFramesComputationMode」已淘汰

自 AGP 7.2 開始,類別位元碼檢測工具 API Component.transformClassesWithComponent.setAsmFramesComputationMode 已被淘汰。他們已移至新的區塊 Component.instrumentation,其中包含所有設定檢測程序相關的 API。如要繼續使用這些檢測功能,請改用新區塊中的對應 API,如以下程式碼片段所示:

androidComponents {
      onVariants(selector().all(), {
          instrumentation.transformClassesWith(AsmClassVisitorFactoryImpl.class,
                                               InstrumentationScope.Project) { params ->
              params.x = "value"
          }
          instrumentation.setAsmFramesComputationMode(
              COMPUTE_FRAMES_FOR_INSTRUMENTED_METHODS
          )
      })
  }