Flutterで、Android版のアプリをビルドすると、利用するパッケージにより flutter.minSdkVersionで定義されているバージョンより高いバージョンを要求されることがあります。
下記のビルドエラーではflutter.minSdkVersion
に設定されているバージョンが16(Android 4.1、4.1.1)で、package_info_plus
が、minSdkVersion
19(Android 4.4) 以上を要求したため、必要なバージョンを満たさずエラーとなりました。
ビルドエラー
/Users/***/Documents/****/android/app/src/debug/AndroidManifest.xml Error:
uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:package_info_plus] /Users/***/Documents/***/build/package_info_plus/intermediates/merged_manifest/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="dev.fluttercommunity.plus.packageinfo" to force usage (may lead to runtime failures)
flutter.minSdkVersion
は、/android/app/src/build.gradle
に記載されていますが、minSdkVersion
のバージョン表記がflutter.minSdkVersion
を参照しているため、いくつが設定されているのかが変わりません。
build.gradle
defaultConfig {
applicationId "com.example.untitled"
minSdkVersion flutter.minSdkVersion
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
実は、flutter.minSdkVersionのバージョンの記載は、flutter sdkのディレクトリ内flutter.gradle
にハードコピーされています。
flutter/packages/flutter_tools/gradle/flutter.gradle
flutter.gradle
// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import static groovy.io.FileType.FILES
import com.android.builder.model.AndroidProject
import com.android.build.OutputFile
import groovy.json.JsonSlurper
import java.nio.file.Path
import java.nio.file.Paths
import java.util.regex.Matcher
import java.util.regex.Pattern
import org.apache.tools.ant.taskdefs.condition.Os
import org.gradle.api.DefaultTask
import org.gradle.api.GradleException
import org.gradle.api.Project
import org.gradle.api.Plugin
import org.gradle.api.Task
import org.gradle.api.file.CopySpec
import org.gradle.api.file.FileCollection
import org.gradle.api.tasks.Copy
import org.gradle.api.tasks.InputFiles
import org.gradle.api.tasks.OutputDirectory
import org.gradle.api.tasks.TaskAction
import org.gradle.api.tasks.bundling.Jar
import org.gradle.internal.os.OperatingSystem
import org.gradle.util.VersionNumber
/** For apps only. Provides the flutter extension used in app/build.gradle.
* The versions specified here should match the values used in
* ../lib/src/android/gradle_utils.dart, so when bumping, make sure to update
* the versions specified there.
*/
class FlutterExtension {
/** Sets the compileSdkVersion used by default in Flutter app projects. */
static int compileSdkVersion = 33
/** Sets the minSdkVersion used by default in Flutter app projects. */
static int minSdkVersion = 16
/** Sets the targetSdkVersion used by default in Flutter app projects. */
static int targetSdkVersion = 33
/**
* Sets the ndkVersion used by default in Flutter app projects.
* Chosen as default version of the AGP version below as found in
* https://developer.android.com/studio/projects/install-ndk#default-ndk-per-agp
*/
static String ndkVersion = "23.1.7779620"
確認すると16
(Android 4.1、4.1.1)が設定されていることが分かります。ここでflutter.gradle
のコードを直接変更すると、SDKのアップデートのたびに変更が必要となり、好ましくありません。そのためdefaultConfig
の定義を書き換えることが一番簡単な修正方法となります。下記の例では、minSdkVersion 23
として、Android6.0以上を対象にしています。
build.gradle
defaultConfig {
applicationId "com.example.untitled"
minSdkVersion 23
targetSdkVersion flutter.targetSdkVersion
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}