Come cambiare Android minSdkVersion nel progetto flutter


92

Stavo cercando di avviare un progetto flutter per un'app che utilizza il bluetooth per comunicare. Per questo, stavo usando flutter blue .

Sfortunatamente, quando ho provato a eseguire (su un dispositivo Android) il primo esempio che ho creato, ho riscontrato il seguente errore:

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)

Se fossi su Android Studio, saprei come potenziare Android minSdkVersion, ma su un progetto flutter (usando VSCode) ero un po 'perso.

È possibile aumentare minSdkVersion con flutter e come?


Informazioni di base su minSdkVersion che potrebbero essere utili: developer.android.com/ndk/guides/sdk-versions#minsdkversion
Mark Gavagan

Risposte:


217

È effettivamente possibile aumentare minSdkVersion, ma mi ci è voluto troppo tempo per scoprirlo perché le ricerche su Google si traducono principalmente in discussioni di risultato sul minimo assoluto di Sdk che il flutter della versione dovrebbe essere in grado di supportare, non su come aumentarlo nel tuo progetto .

Come in un progetto Android Studio, devi modificare il build.gradlefile. In un progetto svolazzante, si trova sul percorso ./android/app/build.gradle.

Il parametro che deve essere modificato è, ovviamente, minSdkVersion 16aumentarlo fino a quello di cui hai bisogno (in questo 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"
}

Sembra ovvio ora, ma mi ci è voluto abbastanza tempo per capirlo da solo.


8
Il percorso del file è stato molto utile! Stavo guardando il file build.gradle sotto android/e non riuscivo a capire per tutta la vita come aggiornare questo minSdkVersion.
Adam

Cosa succede se non si desidera modificare minSdkVersion poiché desidero scegliere come target le versioni inferiori dell'SDK? @Maldus
pblead26

Allora non cambiarlo? Non sono sicuro di aver capito la domanda, ho riscontrato questo problema perché flutterblue non funzionava senza modificare minSDKVersion. Se vuoi usare flutterblue con una versione SDK inferiore, temo che sia un problema della libreria flutter.
Maldus

13

È possibile modificare il minSdkVersionnel file 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"
}

1

Segui questi passaggi per modificare il minSdkVersionproblema.

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

Secondo => defaultconfig {// puoi trovarlo all'interno 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
    }

1

Ho riscontrato questo problema durante l'impostazione di Auth0, flutter_appauth e flutter_secure_storage nella mia app flutter. Dopo aver modificato la versione minSdkVersion, ho ricevuto questo errore

C:\Users\myusername\AndroidStudioProjects\wole\android\app\src\debug\AndroidManifest.xml Error:
    Attribute data@scheme at AndroidManifest.xml requires a placeholder substitution but no value for <appAuthRedirectScheme> is provided.
FAILURE: Build failed with an exception.
  • Cosa è andato storto: esecuzione non riuscita per l'attività ": app: processDebugManifest".

Unione manifest non riuscita: lo schema di dati @ attributo in AndroidManifest.xml richiede una sostituzione di segnaposto ma non viene fornito alcun valore per.

La soluzione è aggiungere manifestPlaceholder in questo modo

guarda l'immagine


0

Se la tua app richiede una versione minima specifica della piattaforma Android, puoi specificare tale requisito di versione come impostazioni a livello di API nel build.gradlefile dell'app . Durante il processo di compilazione, queste impostazioni vengono unite nel file manifest della tua app. La specifica dei requisiti a livello di API garantisce che l'app possa essere installata solo su dispositivi che eseguono una versione compatibile della piattaforma Android.

Devi impostare minSdkVersionin build.gradlefile, situato in  <app dir>/android/app e impostare un valore nel  defaultConfigblocco:

Sono disponibili due impostazioni a livello di API:

  • minSdkVersion - La versione minima della piattaforma Android su cui verrà eseguita l'app, specificata dall'identificatore del livello API della piattaforma.
  • targetSdkVersion - Specifica il livello API su cui l'app è progettata per essere eseguita. In alcuni casi, ciò consente all'app di utilizzare elementi o comportamenti manifest definiti nel livello API di destinazione, anziché limitarsi a utilizzare solo quelli definiti per il livello API minimo.

Per specificare i requisiti di livello API predefiniti in un  build.gradle file, aggiungi una o più delle impostazioni precedenti al  defaultConfig {} blocco, nidificate all'interno del  android {} blocco. Puoi anche sovrascrivere questi valori predefiniti per diverse versioni della tua app aggiungendo le impostazioni per creare tipi o versioni di prodotto. Il build.gradle file seguente  specifica i valori predefiniti  minSdkVersion e le  targetSdkVersion impostazioni nel  defaultConfig {} blocco e sostituisce  minSdkVersion un gusto del prodotto.

android {
   compileSdkVersion 29

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

Per ulteriori informazioni, consulta la documentazione dell'elemento manifest di uses-sdk-element e il documento API Levels .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.