Jak zmienić minSdkVersion Androida w projekcie flutter


86

Próbowałem rozpocząć trzepoczący projekt dla aplikacji używającej do komunikacji Bluetooth. Do tego użyłem flutter blue .

Niestety podczas próby uruchomienia (na urządzeniu z systemem Android) pierwszego utworzonego przeze mnie przykładu napotkałem następujący błąd:

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)

Gdybym był na Android Studio, wiedziałbym, jak podbić minSdkVersion Androida, ale w projekcie flutter (używając VSCode) byłem trochę zagubiony.

Czy można zwiększyć minSdkVersion za pomocą fluttera i jak?

Odpowiedzi:


204

Rzeczywiście jest możliwe zwiększenie minSdkVersion, ale zajęło mi to zbyt dużo czasu, aby się tego dowiedzieć, ponieważ wyszukiwania google najczęściej przynoszą rezultaty, ponieważ dyskusje o absolutnym minimalnym poziomie wersji Sdk powinny być w stanie obsłużyć, a nie o tym, jak zwiększyć go we własnym projekcie .

Podobnie jak w projekcie Android Studio, musisz edytować build.gradleplik. W trzepoczącym projekcie znajduje się na ścieżce ./android/app/build.gradle.

Parametr, który trzeba zmienić, to oczywiście minSdkVersion 16podbijanie go do tego, czego potrzebujesz (w tym przypadku 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"
}

Wydaje się to teraz oczywiste, ale zajęło mi wystarczająco dużo czasu, aby samodzielnie to rozgryźć.


8
Ścieżka do pliku była bardzo pomocna! Patrzyłem na plik build.gradle pod android/i nie mogłem wymyślić do końca życia, jak zaktualizować tę minSdkVersion.
Adam

A jeśli nie chcę zmieniać minSdkVersion, ponieważ chcę kierować reklamy na niższe wersje SDK? @Maldus
pblead26

Więc nie zmieniaj tego? Nie jestem pewien, czy rozumiem pytanie, trafiłem na ten problem, ponieważ flutterblue nie działał bez zmiany minSDKVersion. Jeśli chcesz używać flutterblue z niższą wersją SDK, obawiam się, że to problem z biblioteką flutter.
Maldus

9

Można zmienić minSdkVersionw pliku 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

Wykonaj poniższe czynności, aby zmienić minSdkVersionproblem.

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

Second => defaultconfig {// znajdziesz to w środku 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
    }

0

Jeśli Twoja aplikacja wymaga określonej minimalnej wersji platformy Android, możesz określić to wymaganie wersji jako ustawienia poziomu interfejsu API w build.gradlepliku aplikacji . Podczas procesu kompilacji te ustawienia są scalane z plikiem manifestu aplikacji. Określenie wymagań na poziomie interfejsu API gwarantuje, że aplikację można zainstalować tylko na urządzeniach z kompatybilną wersją platformy Android.

Musisz zrobić set minSdkVersionin build.gradlefile, znajdujący się w  <app dir>/android/app i ustawić wartość w  defaultConfigbloku:

Dostępne są dwa ustawienia poziomu interfejsu API:

  • minSdkVersion - Minimalna wersja platformy Android, na której będzie działać aplikacja, określona przez identyfikator poziomu interfejsu API platformy.
  • targetSdkVersion - Określa poziom interfejsu API, na którym aplikacja ma działać. W niektórych przypadkach pozwala to aplikacji na użycie elementów manifestu lub zachowań zdefiniowanych na docelowym poziomie interfejsu API, zamiast ograniczać się do używania tylko tych zdefiniowanych dla minimalnego poziomu interfejsu API.

Aby określić domyślne wymagania poziomu interfejsu API w  build.gradle pliku, dodaj co najmniej jedno z powyższych ustawień do  defaultConfig {} bloku, zagnieżdżonego w  android {} bloku. Możesz również zastąpić te wartości domyślne dla różnych wersji aplikacji, dodając ustawienia do typów kompilacji lub smaków produktów. Poniższy  build.gradle plik określa wartości domyślne  minSdkVersion i  targetSdkVersion ustawienia w  defaultConfig {} bloku oraz nadpisania  minSdkVersion dla jednego smaku produktu.

android {
   compileSdkVersion 29

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

Aby uzyskać więcej informacji, zobacz dokumentację elementu manifestu uses-sdk-element i dokument poziomów interfejsu API .

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.