# Flutter 現在於 Android 建置中自動設定預設的 `abiFilters`

> Flutter Gradle Plugin 現在會自動為 Android 建置設定 abiFilters， 這可能會影響自訂 abiFilters 的設定。




:::important
這些重大變更文件在其發布的版本時是準確的。隨著時間推移，這裡描述的
因應措施可能會變得不準確。一般而言，我們不會在每個版本發布時同步更新這些重大變更文件。

[重大變更索引檔案](/release/breaking-changes)列出了每個版本所建立的文件。
:::


## 摘要

自 Flutter 3.35 起，Flutter Gradle Plugin 會自動為 Android 建置設定
[`abiFilters`][]，以避免在發佈 APK 時包含不支援的架構。
此變更可能會影響你在應用程式的 `build.gradle` 檔案中自訂的
`abiFilters` 設定。

## 背景

這項變更是為了解決第三方相依套件帶有 x86 原生函式庫時，
Google Play 會錯誤地判斷 Flutter 應用程式支援 x86 裝置的問題。
當使用 x86 裝置的用戶安裝這些應用程式時，會因 Flutter 的原生函式庫
並未支援 x86 而導致執行時當機。

Flutter Gradle Plugin 現在會自動設定 `abiFilters`，
只包含 Flutter 支援的架構。這可防止 Google Play
將應用程式提供給不相容的裝置。

## 變更說明

Flutter Gradle Plugin 現在會在非 debuggable 建置時，
且預設未啟用 `--splits-per-abi` 選項時，以程式方式設定 `abiFilters` 為：
- `armeabi-v7a`
- `arm64-v8a`
- `x86_64`

由於這項自動設定會在處理你的 `build.gradle` 檔案之前執行，
因此可能會影響依賴於該設定為空的自訂 `abiFilters` 設定。
Flutter 可以保留你在 `defaultConfig` 中設定的 `abiFilters`，
但以目前的 Android Gradle Plugin API，
無法安全地保留所有 `buildTypes` 或 `productFlavors` 中的 ABI 過濾器自訂設定。

## 遷移指南

如果你的應用程式沒有自訂 `abiFilters`，則無需進行任何變更。

如果你的應用程式需要自訂包含哪些架構，有以下幾種選擇：

### 選項 1：使用 splits-per-abi 旗標

如果你想要控制架構的納入，請使用 Flutter 內建的
`--splits-per-abi` 選項，而非手動設定 `abiFilters`：

```console
flutter build apk --splits-per-abi
```

這會為每個架構建立獨立的 APK，並自動停用自動的 `abiFilters` 設定。

### 選項 2：在 defaultConfig 中設定 abiFilters

如果你必須使用單一 APK 並自訂架構過濾器，請先清除自動設定的過濾器，然後在 `defaultConfig` 中自行設定。例如：

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

### 選項 3：停用 Flutter 預設的 ABI 過濾

如果你的應用程式在 `buildTypes` 或 `productFlavors` 中設定 ABI 過濾器，
請在執行 `flutter build` 或 `flutter run` 時傳入 `-Pdisable-abi-filtering=true`。
這會避免 Flutter 套用其預設的 ABI 過濾器，
讓你的建置類型或產品風味（product flavor）設定決定要納入哪些架構。

## 時程

已納入版本：3.35.0<br>
穩定版發佈：3.35

相關議題：
* [Issue #174004](https://github.com/flutter/flutter/issues/174004)
* [Issue #153476](https://github.com/flutter/flutter/issues/153476)
* [Issue #175845](https://github.com/flutter/flutter/issues/175845)

相關 PR：
* [PR #168293](https://github.com/flutter/flutter/pull/168293)
* [PR #177753](https://github.com/flutter/flutter/pull/177753)

[`abiFilters`]: https://developer.android.com/reference/tools/gradle-api/8.7/com/android/build/api/dsl/Ndk#abiFilters()

