Cómo cambiar Android minSdkVersion en el proyecto flutter

86

Estaba tratando de iniciar un proyecto de flutter para una aplicación que usa bluetooth para comunicarse. Para eso, estaba usando flutter blue .

Desafortunadamente, al intentar ejecutar (en un dispositivo Android) el primer ejemplo que creé, me encontré con el siguiente error:

FAILURE: Build failed with an exception.

  * What went wrong:
  Execution failed for task ':app:processDebugManifest'.
  > Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:flutter_blue] /home/maldus/Projects/flutter/polmac/build/flutter_blue/intermediates/manifests/full/debug/AndroidManifest.xml as the library might be using APIs not available in 16
    Suggestion: use a compatible library with a minSdk of at most 16,
            or increase this project's minSdk version to at least 19,
            or use tools:overrideLibrary="com.pauldemarco.flutterblue" to force usage (may lead to runtime failures)

Si estuviera en Android Studio, sabría cómo mejorar Android minSdkVersion, pero en un proyecto de flutter (usando VSCode) estaba un poco perdido.

¿Es posible aumentar minSdkVersion con flutter y cómo?

Maldus
fuente

Respuestas:

204

De hecho, es posible aumentar minSdkVersion, pero me tomó demasiado tiempo descubrirlo porque las búsquedas de Google en su mayoría arrojan como resultado discusiones sobre el mínimo absoluto que el flutter de la versión Sdk debería ser compatible, no sobre cómo aumentarlo en su propio proyecto .

Como en un proyecto de Android Studio, debes editar el build.gradlearchivo. En un proyecto de aleteo, se encuentra en el camino ./android/app/build.gradle.

El parámetro que debe cambiarse es, por supuesto, minSdkVersion 16aumentarlo a lo que necesita (en este caso 19).

defaultConfig {
    // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
    applicationId "com.example.projectname"
    minSdkVersion 19 //*** This is the part that needs to be changed, previously was 16
    targetSdkVersion 28
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}

Parece obvio ahora, pero me tomó el tiempo suficiente para resolverlo por mi cuenta.

Maldus
fuente
8
¡La ruta del archivo fue muy útil! Estaba mirando el archivo build.gradle debajo android/y no pude averiguar por mi vida cómo actualizar este minSdkVersion.
Adam
¿Qué sucede si no quiero cambiar minSdkVersion porque quiero orientarme a las versiones inferiores del SDK? @Maldus
pblead26
¿Entonces no lo cambies? No estoy seguro de entender la pregunta, encontré este problema porque flutterblue no funcionó sin cambiar minSDKVersion. Si desea utilizar flutterblue con una versión de SDK inferior, me temo que es un problema de la biblioteca de flutter.
Maldus
9

Se puede cambiar el minSdkVersionen el archivo Project_Name/android/app/build.gradle, defaultconfig:

defaultConfig {
    // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
    applicationId "com.example.projectname"
    minSdkVersion 16 // <--- There
    targetSdkVersion 27
    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
Roger Cuesta
fuente
1

Siga estos pasos para cambiar el minSdkVersionproblema.

Primero => YouProject_name/android/app/build.gradle

Second => defaultconfig {// puedes encontrarlo dentro build.gradle}

defaultConfig {
        // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html).
        applicationId "com.umair.product_details_using_crud"
        minSdkVersion 16 // here you can change minSdkVersison
        targetSdkVersion 28
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }
Umair Afzal
fuente
0

Si su aplicación requiere una versión mínima específica de la plataforma Android, puede especificar ese requisito de versión como configuración de nivel de API en el build.gradlearchivo de la aplicación . Durante el proceso de compilación, estas configuraciones se combinan en el archivo de manifiesto de su aplicación. Especificar los requisitos del nivel de API garantiza que su aplicación solo se pueda instalar en dispositivos que ejecuten una versión compatible de la plataforma Android.

Que tiene que hacer juego minSdkVersionen el build.gradlearchivo, ubicado en  <app dir>/android/app y establecer un valor en el  defaultConfigbloque:

Hay dos configuraciones de nivel de API disponibles:

  • minSdkVersion - La versión mínima de la plataforma Android en la que se ejecutará la aplicación, especificada por el identificador de nivel de API de la plataforma.
  • targetSdkVersion - Especifica el nivel de API en el que la aplicación está diseñada para ejecutarse. En algunos casos, esto permite que la aplicación use elementos de manifiesto o comportamientos definidos en el nivel de API de destino, en lugar de limitarse a usar solo los definidos para el nivel mínimo de API.

Para especificar los requisitos de nivel de API predeterminados en un  build.gradle archivo, agregue una o más de las configuraciones anteriores al  defaultConfig {} bloque, anidado dentro del  android {} bloque. También puede anular estos valores predeterminados para diferentes versiones de su aplicación agregando la configuración para construir tipos o sabores de productos. El siguiente  build.gradle archivo especifica la configuración minSdkVersion y los  targetSdkVersion valores predeterminados  en el  defaultConfig {} bloque y se anula  minSdkVersion para un tipo de producto.

android {
   compileSdkVersion 29

  ...
  defaultConfig {
    applicationId "com.app.yourapp”
    minSdkVersion 16
    targetSdkVersion 29
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
  }
  productFlavors {
    main {
      ...
    }
    afterLollipop {
      ...
      minSdkVersion 21
    }
  }
}

Para obtener más información, consulte la documentación del elemento de manifiesto uses-sdk-element y el documento de niveles de API .

Paresh Mangukiya
fuente