วิธีเปลี่ยน Android minSdkVersion ในโครงการ Flutter


92

ฉันพยายามเริ่มโปรเจ็กต์กระพือปีกสำหรับแอพที่ใช้บลูทู ธ ในการสื่อสาร เพื่อที่ผมใช้สีฟ้ากระพือ

ขออภัยเมื่อพยายามเรียกใช้ (บนอุปกรณ์ Android) ตัวอย่างแรกที่ฉันสร้างขึ้นฉันพบกับข้อผิดพลาดต่อไปนี้:

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 ฉันจะรู้วิธีการใช้ Android minSdkVersion แต่ในโครงการที่กระพือปีก (ใช้ VSCode) ฉันหลงทางเล็กน้อย

เป็นไปได้หรือไม่ที่จะเพิ่ม minSdkVersion ด้วยการกระพือปีกและทำอย่างไร?


ข้อมูลพื้นฐานเกี่ยวกับ minSdkVersion ที่อาจเป็นประโยชน์: developer.android.com/ndk/guides/sdk-versions#minsdkversion
Mark Gavagan

คำตอบ:


219

เป็นไปได้ที่จะเพิ่ม minSdkVersion แต่ฉันใช้เวลามากเกินไปในการค้นหาเนื่องจากการค้นหาของ Google ส่วนใหญ่ให้ผลตอบแทนจากการอภิปรายเกี่ยวกับการกระพือเวอร์ชัน Sdk ขั้นต่ำที่แน่นอนควรสามารถรองรับได้ไม่ใช่วิธีเพิ่มในโครงการของคุณเอง .

เช่นเดียวกับในโครงการ Android Studio คุณต้องแก้ไขbuild.gradleไฟล์ ./android/app/build.gradleในโครงการกระพือก็จะพบได้ที่เส้นทาง

แน่นอนว่าพารามิเตอร์ที่ต้องเปลี่ยนคือการminSdkVersion 16ชนกับสิ่งที่คุณต้องการ (ในกรณีนี้คือ 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"
}

ตอนนี้ดูเหมือนชัดเจน แต่ฉันใช้เวลานานพอที่จะคิดออกด้วยตัวเอง


8
เส้นทางของไฟล์มีประโยชน์มาก! ฉันกำลังดูไฟล์ build.gradle ด้านล่างandroid/และไม่สามารถเข้าใจชีวิตของฉันได้ว่าจะอัปเดต minSdkVersion นี้ได้อย่างไร
อดัม

จะเกิดอะไรขึ้นหากฉันไม่ต้องการเปลี่ยน minSdkVersion เนื่องจากฉันต้องการกำหนดเป้าหมายเวอร์ชัน SDK ที่ต่ำกว่า @Maldus
pblead26

แล้วไม่เปลี่ยนได้ไหม ฉันไม่แน่ใจว่าฉันเข้าใจคำถามฉันพบปัญหานี้เนื่องจาก flutterblue ไม่ทำงานโดยไม่เปลี่ยน minSDKVersion หากคุณต้องการใช้ flutterblue กับ SDK เวอร์ชันที่ต่ำกว่าฉันเกรงว่าจะเป็นปัญหาของไลบรารี Flutter
มัลดัส

13

คุณสามารถเปลี่ยนminSdkVersionในแฟ้ม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

ทำตามขั้นตอนต่อไปนี้เพื่อเปลี่ยนminSdkVersionปัญหา

แรก => YouProject_name/android/app/build.gradle

วินาที => defaultconfig {// คุณสามารถค้นหาได้ภายใน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

ฉันพบปัญหานี้ในการตั้งค่า Auth0, flutter_appauth และ flutter_secure_storage ภายในแอปพลิเคชัน Flutter ของฉัน หลังจากเปลี่ยนเวอร์ชัน minSdkVersion ฉันได้รับข้อผิดพลาดนี้

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.
  • เกิดอะไรขึ้น: การดำเนินการล้มเหลวสำหรับงาน ': app: processDebugManifest'

การควบรวมกิจการ Manifest ล้มเหลว: Attribute data @ Scheme ที่ AndroidManifest.xml ต้องการการแทนที่ตัวยึดตำแหน่ง แต่ไม่มีการระบุค่าสำหรับ

วิธีแก้ปัญหาคือการเพิ่ม manifestPlaceholder ดังนั้น

ดูภาพ


0

หากแอปของคุณต้องการแพลตฟอร์ม Android เวอร์ชันขั้นต่ำที่เฉพาะเจาะจงคุณสามารถระบุข้อกำหนดเวอร์ชันนั้นเป็นการตั้งค่าระดับ API ในbuild.gradleไฟล์ของแอป ในระหว่างขั้นตอนการสร้างการตั้งค่าเหล่านี้จะรวมอยู่ในไฟล์รายการของแอปของคุณ การระบุข้อกำหนดระดับ API ช่วยให้มั่นใจได้ว่าแอปของคุณสามารถติดตั้งบนอุปกรณ์ที่ใช้แพลตฟอร์ม Android เวอร์ชันที่เข้ากันได้เท่านั้น

คุณต้องตั้งค่าminSdkVersionในbuild.gradleไฟล์ซึ่งอยู่ใน  <app dir>/android/app และตั้งค่าในไฟล์ defaultConfigบล็อก:

มีการตั้งค่าระดับ API สองแบบ:

  • minSdkVersion - เวอร์ชันขั้นต่ำของแพลตฟอร์ม Android ที่แอปจะทำงานซึ่งระบุโดยตัวระบุระดับ API ของแพลตฟอร์ม
  • targetSdkVersion - ระบุระดับ API ที่แอปออกแบบมาให้ทำงาน ในบางกรณีสิ่งนี้อนุญาตให้แอปใช้องค์ประกอบหรือพฤติกรรมที่กำหนดไว้ในระดับ API เป้าหมายแทนที่จะ จำกัด ให้ใช้เฉพาะที่กำหนดไว้สำหรับระดับ API ขั้นต่ำ

หากต้องการระบุข้อกำหนดระดับ API เริ่มต้นใน  build.gradle ไฟล์ให้เพิ่มการตั้งค่าด้านบนอย่างน้อยหนึ่งรายการใน  defaultConfig {} บล็อกซึ่งซ้อนอยู่ภายใน  android {} บล็อก คุณยังสามารถแทนที่ค่าเริ่มต้นเหล่านี้สำหรับแอปเวอร์ชันต่างๆได้โดยเพิ่มการตั้งค่าเพื่อสร้างประเภทหรือรสชาติของผลิตภัณฑ์ build.gradle ไฟล์ต่อไปนี้  ระบุค่าเริ่มต้น  minSdkVersion และ  targetSdkVersion การตั้งค่าใน  defaultConfig {} บล็อกและแทนที่  minSdkVersion สำหรับรสชาติของผลิตภัณฑ์เดียว

android {
   compileSdkVersion 29

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

สำหรับข้อมูลเพิ่มเติมโปรดดูเอกสารองค์ประกอบรายการใช้ -dk-elementและเอกสารระดับ API

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.