Flutter projesinde Android minSdkVersion nasıl değiştirilir


91

Bluetooth kullanan bir Uygulamanın iletişim kurması için bir flutter projesi başlatmaya çalışıyordum. Bunun için flutter blue kullanıyordum .

Ne yazık ki, çalıştırmaya çalışırken (bir Android cihazda) oluşturduğum ilk örnek şu hatayla karşılaştım:

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)

Android Studio'da olsaydım, Android minSdkVersion'ı nasıl yükselteceğimi bilirdim, ancak bir flutter projesinde (VSCode kullanarak) biraz kayboldum.

MinSdkVersion'ı flutter ile artırmak mümkün müdür ve nasıl?


MinSdkVersion hakkında yardımcı olabilecek arka plan bilgileri: developer.android.com/ndk/guides/sdk-versions#minsdkversion
Mark Gavagan

Yanıtlar:


216

MinSdkVersion'ı artırmak gerçekten mümkün, ancak bunu bulmak çok zamanımı aldı çünkü google aramaları çoğunlukla sonuç olarak ortaya çıkıyor, mutlak minimum Sdk sürümü flutter'ı kendi projenizde nasıl artıracağınıza değil, destekleyebilmelidir. .

Bir Android Studio projesinde olduğu gibi, build.gradledosyayı düzenlemeniz gerekir . Bir flutter projesinde, yolda bulunur ./android/app/build.gradle.

Değiştirilmesi gereken parametre, elbette, minSdkVersion 16ihtiyacınız olan şeye çarpmaktır (bu durumda 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"
}

Şimdi açık görünüyor, ama kendi başıma çözmem yeterince uzun sürdü.


8
Dosya yolu çok yardımcı oldu! Altındaki build.gradle dosyasına bakıyordum ve bu minSdkVersion'ı android/nasıl güncelleyeceğimi hayatım boyunca anlayamadım.
Adam

Daha düşük SDK sürümlerini hedeflemek istediğim için minSdkVersion'ı değiştirmek istemezsem ne olur? @Maldus
pblead26

O zaman değiştirmeyin? Soruyu anladığımdan emin değilim, bu konuya çarptım çünkü flutterblue minSDKVersion'ı değiştirmeden çalışmadı. Daha düşük bir SDK sürümüyle flutterblue kullanmak istiyorsanız, korkarım bu flutter kitaplığının bir sorunu.
Maldus

13

Değişebilirsin minSdkVersiondosyada 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

minSdkVersionSorunu değiştirmek için aşağıdaki adımları izleyin .

İlk => YouProject_name/android/app/build.gradle

İkinci => defaultconfig {// içinde bulabilirsiniz 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

Flutter uygulamamda Auth0, flutter_appauth ve flutter_secure_storage'ı kurarken bu sorunla karşılaştım. MinSdkVersion sürümünü değiştirdikten sonra bu hatayı aldım

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.
  • Ne yanlış gitti: ': app: processDebugManifest' görevi için yürütme başarısız oldu.

Manifest birleşmesi başarısız oldu: AndroidManifest.xml'deki öznitelik verileri @ şeması bir yer tutucunun değiştirilmesini gerektiriyor, ancak için değer sağlanmadı.

Çözüm, manifestPlaceholders eklemektir.

görseli göster


0

Uygulamanız Android platformunun belirli bir minimum sürümünü gerektiriyorsa, bu sürüm gereksinimini uygulamanın build.gradledosyasında API seviyesi ayarları olarak belirtebilirsiniz . Derleme işlemi sırasında bu ayarlar, uygulamanızın manifest dosyasında birleştirilir. API düzeyi gereksinimleri belirtmek, uygulamanızın yalnızca Android platformunun uyumlu bir sürümünü çalıştıran cihazlara yüklenebilmesini sağlar.

Blokta  bir değer  belirlemeniz minSdkVersionve build.gradledosyada  ayarlamanız gerekir :<app dir>/android/appdefaultConfig

Kullanılabilir iki API seviyesi ayarı vardır:

  • minSdkVersion - Uygulamanın çalışacağı Android platformunun, platformun API düzeyi tanımlayıcısı tarafından belirtilen minimum sürümü.
  • targetSdkVersion - Uygulamanın çalışmak üzere tasarlandığı API seviyesini belirtir. Bazı durumlarda bu, uygulamanın yalnızca minimum API seviyesi için tanımlananları kullanmakla sınırlandırılmak yerine, hedef API seviyesinde tanımlanan manifest öğelerini veya davranışları kullanmasına izin verir.

Bir build.gradle dosyada varsayılan API seviyesi gereksinimlerini belirtmek  için, defaultConfig {} bloğun içine yuvalanmış olarak  yukarıdaki ayarlardan bir veya daha fazlasını ekleyin  android {} . Ayrıca, türler veya ürün çeşitleri oluşturmak için ayarlar ekleyerek uygulamanızın farklı sürümleri için bu varsayılan değerleri geçersiz kılabilirsiniz. Aşağıdaki  build.gradle dosya  bloktaki varsayılanları minSdkVersion ve targetSdkVersion ayarları  belirtir  ve   bir ürün çeşidi için defaultConfig {}geçersiz kılmalar  minSdkVersion.

android {
   compileSdkVersion 29

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

Daha fazla bilgi için, uses-sdk-element bildirim öğesi belgelerine ve API Düzeyleri belgesine bakın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.