概述

#

從 Flutter 3.35 開始,Flutter Gradle 外掛會自動為 Android 構建設定 abiFilters,以防止在釋出 APK 中包含不支援的架構。此更改可能會破壞您在應用的 build.gradle 檔案中指定的自定義 abiFilters

背景

#

此更改是為了解決一個問題:第三方依賴項(包含 x86 原生庫)會導致 Google Play 錯誤地將 Flutter 應用識別為支援 x86 裝置。當 x86 裝置上的使用者安裝了這些應用時,它們會在執行時崩潰,因為 Flutter 的原生庫不適用於 x86。

Flutter Gradle 外掛現在會自動配置 abiFilters,僅包含 Flutter 支援的架構。這可以防止 Google Play 將應用提供給不相容的裝置。

變更說明

#

當預設未啟用 --splits-per-abi 選項時,Flutter Gradle 外掛現在會以程式設計方式為非可除錯構建設定 abiFilters,以支援

  • armeabi-v7a
  • arm64-v8a
  • x86_64

由於此自動配置發生在處理您的 build.gradle 檔案之前,它可能會破壞依賴於空集設定的自定義 abiFilters 設定。

遷移指南

#

如果您的應用不自定義 abiFilters,則無需進行任何更改。

如果您的應用需要自定義包含的架構,您有幾種選擇:

選項 1:使用 splits-per-abi 標誌

#

如果您想控制架構的包含,請使用 Flutter 內建的 --splits-per-abi 選項,而不是手動配置 abiFilters

flutter build apk --splits-per-abi

這將為每種架構建立單獨的 APK,並自動停用自動 abiFilters 配置。

選項 2:清除並重新配置 abiFilters

#

如果您必須使用具有自定義架構過濾器的單個 APK,請清除自動設定的過濾器,並在您的 build.gradle 中配置您自己的過濾器。例如:

kotlin
android {
    buildTypes {
        release {
            // Clear the automatically set filters.
            ndk.abiFilters.clear()
            // Set your custom filters.
            ndk.abiFilters.addAll(listOf("arm64-v8a"))
        }
    }
}

時間線

#

已釋出到版本:3.35.0
穩定版釋出:3.35

相關問題

相關 PR