概述

#

从 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