Como alterar o Android minSdkVersion no projeto de flutter

91

Eu estava tentando iniciar um projeto de flutter para um aplicativo que usa bluetooth para se comunicar. Para isso, eu estava usando azul flutuante .

Infelizmente, ao tentar executar (em um dispositivo Android) o primeiro exemplo que criei, encontrei o seguinte erro:

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 eu estivesse no Android Studio, saberia como aumentar o Android minSdkVersion, mas em um projeto de flutter (usando VSCode) eu estava um pouco perdido.

É possível aumentar minSdkVersion com flutter e como?

Maldus
fonte
Informações básicas sobre minSdkVersion que podem ser úteis: developer.android.com/ndk/guides/sdk-versions#minsdkversion
Mark Gavagan

Respostas:

216

Na verdade, é possível aumentar minSdkVersion, mas demorei muito para descobrir porque as pesquisas do Google geralmente resultam em discussões sobre o mínimo absoluto de versão Sdk que o flutter deve ser capaz de suportar, e não como aumentá-lo em seu próprio projeto .

Como em um projeto do Android Studio, você deve editar o build.gradlearquivo. Em um projeto de vibração, ele é encontrado no caminho ./android/app/build.gradle.

O parâmetro que precisa ser alterado é, claro, minSdkVersion 16aumentando-o para o que você precisa (neste 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 óbvio agora, mas levei tempo suficiente para descobrir por conta própria.

Maldus
fonte
8
O caminho do arquivo foi muito útil! Eu estava olhando para o arquivo build.gradle em android/e não conseguia descobrir por nada como fazer para que esta minSdkVersion seja atualizada.
Adam
E se eu não quiser alterar a minSdkVersion porque desejo direcionar as versões anteriores do SDK? @Maldus
pblead26
Então não mude? Não tenho certeza se entendi a pergunta, encontrei este problema porque flutterblue não funcionou sem alterar o minSDKVersion. Se você quiser usar flutterblue com uma versão anterior do SDK, infelizmente isso é um problema da biblioteca de flutter.
Maldus de
13

Você pode alterar o minSdkVersionno arquivo 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
fonte
1

Siga estas etapas para mudar o minSdkVersionproblema.

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

Segundo => defaultconfig {// você pode encontrá-lo 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
fonte
1

Eu encontrei este problema ao configurar Auth0, flutter_appauth e flutter_secure_storage em meu aplicativo de flutter. Depois de alterar a versão de minSdkVersion, recebi este erro

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.
  • O que deu errado: a execução falhou para a tarefa ': app: processDebugManifest'.

Falha na fusão de manifesto: o esquema de dados @ de atributo em AndroidManifest.xml requer uma substituição de marcador, mas nenhum valor para é fornecido.

A solução é adicionar manifestPlaceholders, portanto

ver imagem

Kenpachi Zaraki
fonte
0

Se seu aplicativo requer uma versão mínima específica da plataforma Android, você pode especificar esse requisito de versão como configurações de nível de API no build.gradlearquivo do aplicativo . Durante o processo de construção, essas configurações são mescladas no arquivo de manifesto do seu aplicativo. Especificar requisitos de nível de API garante que seu aplicativo só possa ser instalado em dispositivos que executam uma versão compatível da plataforma Android.

Você tem que fazer set minSdkVersionin build.gradlefile, localizado em  <app dir>/android/app e setar um valor no  defaultConfigbloco:

Existem duas configurações de nível de API disponíveis:

  • minSdkVersion - A versão mínima da plataforma Android na qual o aplicativo será executado, especificada pelo identificador de nível de API da plataforma.
  • targetSdkVersion - Especifica o nível de API no qual o aplicativo foi projetado para ser executado. Em alguns casos, isso permite que o aplicativo use elementos de manifesto ou comportamentos definidos no nível de API de destino, em vez de ficar restrito a usar apenas aqueles definidos para o nível mínimo de API.

Para especificar os requisitos de nível de API padrão em um  build.gradle arquivo, adicione uma ou mais das configurações acima ao  defaultConfig {} bloco, aninhadas dentro do  android {} bloco. Você também pode substituir esses valores padrão para diferentes versões do seu aplicativo, adicionando as configurações para construir tipos ou variações de produto. O build.gradle arquivo a seguir  especifica o padrão  minSdkVersion e as  targetSdkVersion configurações no  defaultConfig {} bloco e substituições  minSdkVersion para uma variação do produto.

android {
   compileSdkVersion 29

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

Para obter mais informações, consulte a documentação do elemento de manifesto uses-sdk-element e o documento Níveis API .

Paresh Mangukiya
fonte