Saltar al contenido principal

Flutter ahora establece abiFilters predeterminados en las compilaciones de Android

El Flutter Gradle Plugin ahora configura automáticamente abiFilters para compilaciones de Android, lo que podría romper las configuraciones personalizadas de abiFilters.

Resumen

#

A partir de Flutter 3.35, el Flutter Gradle Plugin establece automáticamente abiFilters para compilaciones de Android con el fin de evitar la inclusión de arquitecturas no soportadas en APKs de lanzamiento. Este cambio puede romper los abiFilters personalizados especificados en el archivo build.gradle de tu aplicación.

Contexto

#

Este cambio se introdujo para solucionar un problema en el que las dependencias de terceros con librerías nativas x86 hacían que Google Play identificara incorrectamente que las aplicaciones de Flutter admitían dispositivos x86. Cuando los usuarios con dispositivos x86 instalaban estas aplicaciones, se producían fallos en tiempo de ejecución porque las librerías nativas de Flutter no están disponibles para x86.

El Flutter Gradle Plugin ahora configura automáticamente abiFilters para incluir solo las arquitecturas que Flutter soporta. Esto evita que Google Play ponga las aplicaciones a disposición de dispositivos incompatibles.

Descripción del cambio

#

El Flutter Gradle Plugin ahora establece de forma programática abiFilters para compilaciones no depurables cuando la opción --splits-per-abi no está habilitada de forma predeterminada para:

  • armeabi-v7a
  • arm64-v8a
  • x86_64

Debido a que esta configuración automática ocurre antes de que se procesen tus archivos build.gradle, podría romper las configuraciones personalizadas de abiFilters que dependen de que el conjunto esté vacío. Flutter puede preservar los abiFilters que configures en defaultConfig, pero no puede preservar de forma segura cada personalización de filtros ABI de buildTypes o productFlavors con las APIs actuales del Android Gradle Plugin.

Guía de migración

#

Si tu aplicación no personaliza abiFilters, no se requieren cambios.

Si tu aplicación necesita personalizar qué arquitecturas se incluyen, tienes varias opciones:

Opción 1: Usa la bandera splits-per-abi

#

Si deseas controlar la inclusión de arquitecturas, utiliza la opción integrada --splits-per-abi de Flutter en lugar de configurar manualmente abiFilters:

flutter build apk --splits-per-abi

Esto crea APKs separados para cada arquitectura y desactiva automáticamente la configuración automática de abiFilters.

Opción 2: Configura abiFilters en defaultConfig

#

Si debes usar un único APK con filtros de arquitectura personalizados, borra los filtros establecidos automáticamente y configura los tuyos propios en defaultConfig. Por ejemplo:

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

Opción 3: Desactiva el filtrado ABI predeterminado de Flutter

#

Si tu aplicación configura filtros ABI en buildTypes o productFlavors, pasa -Pdisable-abi-filtering=true cuando ejecutes flutter build o flutter run. Esto evita que Flutter aplique sus filtros ABI predeterminados, por lo que la configuración de tu tipo de compilación o sabor de producto controlará qué arquitecturas se incluyen.

Timeline

#

Introducido en la versión: 3.35.0
En la versión estable: 3.35

Issues relevantes:

PRs relevantes: