Flutter 프로젝트에서 Android minSdkVersion을 변경하는 방법


92

블루투스를 사용하여 통신하는 앱에 대한 flutter 프로젝트를 시작하려고했습니다. 이를 위해 flutter blue를 사용했습니다 .

불행히도 (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을 높이는 방법을 알고 있었지만 flutter 프로젝트 (VSCode 사용)에서는 약간 길을 잃었습니다.

flutter로 minSdkVersion을 늘릴 수 있습니까?


도움이 될 수있는 minSdkVersion에 대한 배경 정보 : developer.android.com/ndk/guides/sdk-versions#minsdkversion
Mark Gavagan

답변:


219

실제로 minSdkVersion을 늘릴 수는 있지만 Google 검색은 대부분의 결과 토론이 절대 최소 Sdk 버전 flutter가 지원할 수 있어야하므로 자신의 프로젝트에서이를 늘리는 방법이 아니기 때문에 찾는 데 너무 많은 시간이 걸렸습니다. .

Android Studio 프로젝트에서와 마찬가지로 build.gradle파일 을 편집해야 합니다. flutter 프로젝트에서는 경로에 ./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을 업데이트하는 방법을 내 인생에서 알 수 없었습니다.
Adam

낮은 SDK 버전을 대상으로하여 minSdkVersion을 변경하지 않으려면 어떻게해야합니까? @Maldus
pblead26

그럼 바꾸지 마세요? 질문을 이해했는지 잘 모르겠습니다. flutterblue가 minSDKVersion을 변경하지 않고는 작동하지 않았기 때문에이 문제가 발생했습니다. 더 낮은 SDK 버전에서 flutterblue를 사용하고 싶다면 flutter 라이브러리의 문제인 것 같습니다.
Maldus

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

Second => 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

내 flutter 앱에서 Auth0, flutter_appauth 및 flutter_secure_storage를 설정하는 데이 문제가 발생했습니다. 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'작업에 대한 실행이 실패했습니다.

매니페스트 병합 실패 : AndroidManifest.xml의 속성 data @ scheme에는 자리 표시 자 대체가 필요하지만에 대한 값이 제공되지 않습니다.

해결책은 manifestPlaceholders를 추가하는 것입니다.

이미지보기


0

앱에 Android 플랫폼의 특정 최소 버전이 필요한 경우 해당 버전 요구 사항을 앱 build.gradle파일 의 API 수준 설정으로 지정할 수 있습니다 . 빌드 프로세스 중에 이러한 설정은 앱의 매니페스트 파일에 병합됩니다. API 레벨 요구 사항을 지정하면 호환되는 Android 플랫폼 버전을 실행하는 기기에만 앱을 설치할 수 있습니다.

당신은 설정 할 필요가 minSdkVersion있는 build.gradle파일에 위치를  <app dir>/android/app 하고에 값 설정  defaultConfig블록 :

두 가지 API 수준 설정을 사용할 수 있습니다.

  • minSdkVersion — 플랫폼의 API 수준 식별자로 지정된 앱이 실행될 Android 플랫폼의 최소 버전입니다.
  • targetSdkVersion — 앱이 실행되도록 설계된 API 수준을 지정합니다. 경우에 따라 앱이 최소 API 수준에 정의 된 항목 만 사용하도록 제한되는 대신 대상 API 수준에 정의 된 매니페스트 요소 또는 동작을 사용할 수 있습니다.

build.gradle 파일 에서 기본 API 레벨 요구 사항을 지정하려면  위의 설정 중 하나 이상을  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
    }
  }
}

자세한 내용은 uses-sdk-element 매니페스트 요소 문서 및 API 수준 문서를 참조하세요.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.