Saltar al contenido principal

.flutter-plugins-dependencies reemplaza a .flutter-plugins.

La salida de archivo de herramienta obsoleta `.flutter-plugins` ha sido reemplazada por `.flutter-plugins-dependencies`, y cualquier script de compilación o referencia a ella también debe actualizarse.

Resumen

#

La herramienta flutter ya no generará el archivo de metadatos .flutter-plugins, y solo generará .flutter-plugins-dependencies.

Las herramientas y scripts de compilación, como las configuraciones de Gradle (para aplicaciones Android) que dependen de la presencia de .flutter-plugins deben ser actualizados.

Contexto

#

En 2019, .flutter-plugins-dependencies fue añadido como un formato de archivo más nuevo que reemplaza a .flutter-plugins.

Así que un archivo que se veía algo así:

.flutter-plugins
camera=/path/to/camera/plugin
shared_preferences=shared_preferences

Fue reemplazado por algo como esto:

.flutter-plugins-dependencies
json
{
  "dependencyGraph": {
    "camera": {
      "name": "camera",
      "version": "0.10.0",
      "dependencies": {
        "flutter": "0.0.0"
      }
    },
    "shared_preferences": {
      "name": "shared_preferences",
      "version": "2.0.15",
      "dependencies": {
        "flutter": "0.0.0"
      }
    }
  },
  "flutter": {
    "frameworkRevision": "3a0f99d4f2",
    "channel": "stable"
  }
}

Generar ambos archivos es una fuente de deuda técnica que complica nuevos conjuntos de características, como no empaquetar plugins de dev_dependency en una aplicación de producción (release).

Guía de migración

#

La mayoría de los desarrolladores de Flutter no analizan ni usan este archivo, pero las configuraciones de compilación podrían hacerlo, incluyendo el archivo settings.gradle generado por ejecuciones más antiguas de flutter create --platforms android. Estos archivos heredados aún podrían hacer referencia a .flutter-plugins y deben actualizarse a un script de compilación más nuevo.

Por ejemplo:

settings.gradle
groovy
include ':app'

def flutterProjectRoot = rootProject.projectDir.parentFile.toPath()

def plugins = new Properties()
// Note explicitly reading the legacy '.flutter-plugins' file.
def pluginsFile = new File(flutterProjectRoot.toFile(), '.flutter-plugins')
if (pluginsFile.exists()) {
    pluginsFile.withReader('UTF-8') { reader -> plugins.load(reader) }
}

plugins.each { name, path ->
    def pluginDirectory = flutterProjectRoot.resolve(path).resolve('android').toFile()
    include ":$name"
    project(":$name").projectDir = pluginDirectory
}

Podría actualizarse a su equivalente settings.gradle.kts:

settings.gradle.kts
kts
pluginManagement {
    val flutterSdkPath = run {
        val properties = java.util.Properties()
        file("local.properties").inputStream().use { properties.load(it) }
        val flutterSdkPath = properties.getProperty("flutter.sdk")
        require(flutterSdkPath != null) { "flutter.sdk not set in local.properties" }
        flutterSdkPath
    }

    includeBuild("$flutterSdkPath/packages/flutter_tools/gradle")

    repositories {
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}

plugins {
    // Note the use of the flutter-plugin-loader versus reading '.flutter-plugins'
    id("dev.flutter.flutter-plugin-loader") version "1.0.0"
    id("com.android.application") version "8.1.0" apply false
    id("org.jetbrains.kotlin.android") version "1.8.22" apply false
}

include(":app")

Para obtener ayuda sobre cómo cambiar al nuevo DSL de plugins, consulta Aplicación imperativa obsoleta de los plugins de Gradle de Flutter.

Para realizar una prueba rápida (smoke test) de si tu compilación depende de un archivo .flutter-plugins, puedes usar la bandera de característica (feature flag) explicit-package-dependencies:

flutter config --explicit-package-dependencies

Cualquier herramienta o script de compilación que pueda depender de la generación del archivo .flutter-plugins ahora fallará.

Timeline

#

Introducido en la versión: 3.28.0-0.0.pre
Lanzamiento estable: 3.32

Una versión estable después de que este cambio se introduzca, ya no se generará .flutter-plugins.

Referencias

#

Issues relevantes:

  • Issue 48918, donde .flutter-plugins fue programado (en 2020) para su obsolescencia.

PRs relevantes:

  • PR 45379, donde originalmente se añadió .flutter-plugins-dependencies.
  • PR 157388, donde se añadió una advertencia a los scripts de compilación de Flutter para Android.