Flutter: 如何在Flutter项目中更改Android的minSdkVersion? 要在Flutter项目中更改Android的minSdkVersion,你需要编辑项目根目录下的`android/app/build.gradle`文件。在这个文件中,你会找到一个名为`defaultConfig`的区块,在这个区块内有一个名为`minSdkVersion`的属性。你可以将这个属性的值修改为你想要的最低版本号。 例如,如果你想将最低版本号设置为19,你可以将`minSdkVersion`属性的值改为19,然后保存文件。 完成这些步骤后,在运行或构建你的Flutter应用程序时,它将使用你指定的最低版本号作为Android设备的最低要求。 希望这对你有所帮助!

374
我试图启动一个使用蓝牙通信的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,但是在一个使用VSCode的Flutter项目中,我有点迷失。
在Flutter中是否可以增加minSdkVersion,如何操作?

以下是有关minSdkVersion的背景信息,可能会有所帮助:https://developer.android.com/ndk/guides/sdk-versions#minsdkversion - Mark Gavagan
这可能很有用:https://dev59.com/jVEG5IYBdhLWcg3wNWts - Ryan
28个回答

509
确实可以增加minSdkVersion,但我花了很多时间才找到它,因为谷歌搜索结果主要是关于Flutter应该支持的绝对最低SDK版本的讨论,而不是如何在你自己的项目中增加它。
就像在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"
}

现在看来很明显,但我自己想出来花了很长时间。


29
文件路径非常有用!我一直在查看android/下的build.gradle文件,无论如何也想不通如何更新这个minSdkVersion。 - Adam
2
如果我不想更改minSdkVersion,因为我想针对较低的SDK版本,该怎么办?@Maldus - pblead26
1
那就不改变它?我不确定我理解这个问题,我遇到了这个问题,因为flutterblue在不更改minSDKVersion的情况下无法工作。如果你想使用较低版本的SDK与flutterblue一起使用,恐怕这是flutter库的问题。 - Maldus
面对相同的问题。似乎除了增加minSdkVersion没有其他办法。 - Faizan Mubasher
2
使用这种方法不是一个好主意!Francis Nduba和(Mr Random&Jahidul Islam)的答案提供了两种好的方法。当您只想为特定项目覆盖minSdkVersion并保持默认minSdkVersion不变时,应使用(Mr Random&Jahidul Islam)的方法。当您想要为所有flutter项目使用特定的minSdkVersion时,应使用Francis Nduba的方法。通常,除非您的软件包/功能需要,否则不应更改所有项目的默认flutter minSdkVersion。 - irshukhan
请查看此文,了解如何在Flutter中更新mindSdkVersion。 - Muhammad Afzal

272

Flutter 2.8或更高版本

更新build.gradle

在更新到Flutter 2.8之前

android {
    compileSdkVersion 30

defaultConfig {
    applicationId "com.example.app"
    minSdkVersion 21
    targetSdkVersion 30
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
    multiDexEnabled true
}

更新到 Flutter 2.8 后:

android {
    compileSdkVersion flutter.compileSdkVersion

defaultConfig {
        applicationId "com.example.app"
        minSdkVersion flutter.minSdkVersion
        targetSdkVersion flutter.targetSdkVersion
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

您应该根据以下说明从local.properties进行更改:

  1. 首先进入android->local.properties

enter image description here

  1. 然后从这里更改

enter image description here

  1. 从build.gradle中像这样进行更改
android {
    compileSdkVersion localProperties.getProperty('flutter.compileSdkVersion').toInteger()

defaultConfig {
    minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger()
    targetSdkVersion localProperties.getProperty('flutter.targetSdkVersion').toInteger()
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
}

2
你知道为什么我创建了新项目,它没有出现吗? - Karin
2
它对我不起作用。 - WebMaster
设置SDK后,请重新启动您的IDE或手动在build.gradle中设置该值。 - Jahidul Islam
6
你不能直接读取 flutter.minSdkVersion,应该使用 localProperties.getProperty('flutter.minSdkVersion')。请查看我的回答:https://dev59.com/GVQK5IYBdhLWcg3wUOV5#70452027 - Mr Random
74
local.properties 文件通常不在源代码控制之下。因此,我认为这不是一个好的地方来存放像这样重要的非本地配置。 - David Miguel
显示剩余5条评论

166
如果你不知道的话,Google Play商店只允许minSdkVersion为20或以上。但是Flutter仍然将默认的minSdkVersion设置为16。你能看到每次新建项目都需要手动更改吗?
你上面的所有建议都不错,但并不是最好的,因为你将被迫修改每个新项目的build.gradle文件。
最好的方法是修改全局minSdkVersion变量的值,这样所有的项目,无论是新的还是旧的,都会采用它。记住,flutter.minSdkVersion意味着该变量位于flutter目录(与sdk一起)。
相关文件是flutter.gradle。
地址是flutter目录/packages/flutter_tools/gradle/flutter.gradle。
class FlutterExtension {
    /** Sets the compileSdkVersion used by default in Flutter app projects. */
    static int compileSdkVersion = 31

    /** 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 = 31

将minSdkVersion的值从16更改为20或更高,并且不要修改build.gradle中的代码。
如果你愿意,你可以在Youtube上观看我制作的视频,解释如何将minSdkVersion从16更改为20或更高。视频链接:flutter configure minSdkVersion from 16 to 20 or above

=======================

由于Flutter 3.13及以上版本的更改,更新回应如下:

从这个版本开始,文件 flutter-directory/packages/flutter_tools/gradle/flutter.gradle 的内容已经移动到这个新位置 flutter-directory/packages/flutter_tools/gradle/src/main/groovy/flutter.groovy。并且默认的 minSdkVersion = 19。但为了与最新的包和Android设备保持安全,最好将其设置为 minSdkVersion = 20


9
谢谢@Francis Nduba Numbi,这绝对是最好的答案。这样我就不必在每个单独的项目上做更改了。我的方法是默认始终针对更高版本,只为某些项目进行向后兼容处理。 - paulobunga
11
我认为你应该更改build.gradle文件。只更改全局变量会影响你自己的系统,因此,如果团队中的其他人(或CI/CD管道)克隆该项目,则可能无法构建它。 - Jani
2
不错的观点。那么,您应该在ReadMe中留下一条注释,以通知最低minSdkVersion。 - Francis Nduba Numbi
47
很抱歉,这是一个非常糟糕的答案。如果您想更改项目,则不应更改工具的源代码。这意味着源控制中的项目没有定义自己的构建信息(在不同计算机上编译结果不同),每个计算机上的每个项目都将使用该版本,升级Flutter将打破它。该工具应该独立于项目。明确地说:无论看起来有多“简单”,在任何情况下都不应该这样做。任何想要将构建固定到特定版本的人都应该直接编辑 build.gradle 文件。 - zeh
10
我不建议使用这个答案。这应该在项目级别进行设置。 - Luke Pighetti
显示剩余13条评论

62

适用于Flutter v2.8

在local.properties文件中添加以下内容:

sdk.dir='<path>'
flutter.sdk='<path>'
flutter.buildMode=debug
flutter.versionName=1.0.0
flutter.versionCode=1

flutter.minSdkVersion=21
flutter.targetSdkVersion=30
flutter.compileSdkVersion=30

应用级别的 build.gradle

defaultConfig {
    minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger()
    targetSdkVersion localProperties.getProperty('flutter.targetSdkVersion').toInteger()
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
}

现在你可以使用 localProperties.getProperty() 来读取 properties 文件中的值。


47
你可以在文件Project_Name/android/app/build.gradle中的defaultconfig更改minSdkVersion
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"
}

35

使用新的Flutter项目(2.8.0)和“Flutter风格”,您可以在local.properties中更改最小sdk版本(而不是编辑app/build.gradle文件)。

# android/local.properties

flutter.minSdkVersion=19

查看 android/app/build.gradle 文件,您将看到像这样的约束变量:

# android/app/build.gradle

android {

  defaultConfig {
    minSdkVersion flutter.minSdkVersion
    targetSdkVersion flutter.targetSdkVersion
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
  }
}

3
我们需要手动创建它吗? - Karin
是的,默认情况下,.gitignore会忽略local.properties文件,如果不存在的话,你应该创建一个。 - dphans

34

以下是更改MinSdk / Minsdk版本错误的详细解决方案,请按照以下步骤进行操作。

在android\local.properties文件中添加以下行:

sdk.dir=
flutter.sdk=C:\\flutter
flutter.buildMode=debug
flutter.versionName=1.0.0
flutter.versionCode=1

flutter.minSdkVersion=21
flutter.targetSdkVersion=31
flutter.compileSdkVersion=31

android\local.properties

删除现有行并将其粘贴到应用程序级别的build.gradle上:android\app\build.gradle

       defaultConfig {
        applicationId "app-id"

        minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger()
        targetSdkVersion localProperties.getProperty('flutter.targetSdkVersion').toInteger()
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
}

输入图片描述


23
将以下行添加到android/local.properties文件中:
flutter.versionCode=1
flutter.versionName=0.0.1
flutter.flutterMinSdkVersion=24
flutter.flutterTargetSdkVersion=31

在android/app/build.gradle文件中,在顶层添加以下行,可能是在"def versionName ="之后的位置。
def flutterMinSdkVersion = localProperties.getProperty('flutter.flutterMinSdkVersion')
if (flutterMinSdkVersion == null) {
    flutterMinSdkVersion = '16'
}

def flutterTargetSdkVersion = localProperties.getProperty('flutter.flutterTargetSdkVersion')
if (flutterTargetSdkVersion == null) {
    flutterTargetSdkVersion = '31'
}

最后编辑 build.gradle 中与以下匹配的部分:

    defaultConfig {
        applicationId "do.main.subdomain" // Use your App ID
        minSdkVersion flutterMinSdkVersion.toInteger()
        targetSdkVersion flutterTargetSdkVersion.toInteger()
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }

一旦所有这些都完成了,你就可以开始了。下次你想要更新某个东西时,你只需要改变一个文件即可。

3
这绝对是正确的答案。当local.properites为空时应用默认值。local.properites不是放置构建版本的正确位置,除非你正在测试特定版本,否则这只会带来麻烦。 - Emile
1
同意 - 最佳答案。 - Sneg

13

所有答案都是很好的。但在Flutter 2.8之后,以下方法是更好的方式来改变SdkVersion:

进入你安装Flutter的根目录。它应该像这样:

C:\src\flutter\flutter

然后前往

packages>Flutter tools>gradle>

在Gradle中,您会看到许多文件,请找到flutter.gradle。右键单击并使用文本编辑器/记事本进行编辑。
在这里,您将找到所有SDK版本。更改它们,保存,然后您就可以开始了。
完整路径应该像这样:(以我的情况为例)
C:\src\flutter\flutter\packages\flutter_tools\gradle

In the image you can see SDKs


1
我正在寻找这一个,谢谢! - Apoorv Pandey

9
这是我最近遇到这个问题时的解决方法:
<your-project>/android/app/build.gradle文件中,
找到android -> defaultConfig -> minSdkVersion并将其替换为 minSdkVersion Math.max(flutter.minSdkVersion, 21) 这里的21可以替换为您希望的任何最低版本。
如果Flutter开始支持23或其他更高版本作为最低版本,您决定升级项目中的Flutter,它仍将起作用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接