颤振:如何改变Android minSdkVersion颤振项目?

我正在尝试为一个使用蓝牙通信的应用程序启动一个颤振项目。为此,我使用了颤振的蓝色

不幸的是,当试图运行(在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),我有点迷失。

是否有可能增加minSdkVersion与颤振,以及如何?

257680 次浏览

增加minSdkVersion确实是可能的,但它花了我太多的时间来找到它,因为谷歌搜索主要产生的结果是关于绝对最小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"
}

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

你可以改变文件Project_Name/android/app/build.gradledefaultconfig中的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"
}

按照以下步骤来改变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
}

我在我的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需要占位符替换,但没有提供for的值。

解决方案就是这样添加manifest占位符

view image

< p >第一次运行 颤振清洁< / >强

然后更改文件Project_Name / android / app /构建。Gradle, defaultconfig:中的minSdkVersion

它在[project_name]/android/app/build.gradle的defaultconfig中找到。defaultconfig

使用新的Flutter项目(2.8.0),使用“Flutter样式”,您可以在本地更改最小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
}
}

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
}

对于颤振v2.8

在当地。属性添加

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

app-level build.gradle

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

现在你可以使用localProperties.getProperty()从属性文件中读取值。

如果你不知道,谷歌Playstore只允许minSdkVersion为20或以上。但是flutter仍然将默认minSdkVersion设置为16。您是否看到您将总是被迫为每个新项目手动更改?

上面所有的建议都很好,但它们不是最好的,因为你将被迫为你创建的每个新项目调整< >强build.gradle < / >强

最好的方法是从global minSdkVersion变量的源修改它的值,这样所有的项目,无论是新项目还是旧项目,都将采用它。记住< >强flutter.minSdkVersion < / >强意味着变量在< >强颤振< / >强目录下(带有sdk)。

问题文件是< >强flutter.gradle < / >强

地址是< >强flutter-directory /包/ 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 2.8开始,设置minSdkVersion, targetSdkVersion和compileSdkVersion略有不同。现在your_flutter_app/android/app/build.gradle路径下的gradle文件看起来像这样:

enter image description here

只需将当前值替换为您想要的版本号,如下所示:

enter image description here

现在运行你的颤振项目,就这样。

所有答案都是最好的。但在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 sdk .

在当前版本的flutter(2.10.4)中,您应该通过进入 Flutter sdk文件夹/packages/打开flutter_tools打开/gradle然后打开Flutter。gradle和找到静态int minSdkVersion,并根据需求更改

< p >例句: C: \ Workspace \ \ \ flutter_tools \ gradle包\ flutter.gradle摆动< / >强

这是你将在颤频中看到的。Gradle文件 .

< p > defaultConfig { //指定你自己唯一的应用程序ID (https://developer.android.com/studio/build/application-id.html)。 applicationId“com.example.map" minSdkVersion 19 targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger () versionName flutterVersionName } < / p >

添加以下行到android/local。属性文件:

flutter.versionCode=1
flutter.versionName=0.0.1
flutter.flutterMinSdkVersion=24
flutter.flutterTargetSdkVersion=31

在文件的顶层添加以下行,可以在"def versionName ="在文件android/app/build.gradle中:

def flutterMinSdkVersion = localProperties.getProperty('flutter.flutterMinSdkVersion')
if (flutterMinSdkVersion == null) {
flutterMinSdkVersion = '16'
}


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

最后编辑构建的部分。Gradle匹配如下:

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

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

改变的地方。下面提到的属性文件..因为目前游戏商店更新最低目标API版本至少30

sdk.dir=/Users/sweetnandha/Library/Android/sdk
flutter.sdk=/Users/sweetnandha/FlutterDev/flutter
flutter.buildMode=debug
flutter.versionName=1.0.0
flutter.versionCode=1
flutter.compileSdkVersion=32
flutter.minSdkVersion=21
flutter.targetSdkVersion=32

enter image description here

enter image description here

我发现解决这个问题的最好方法是通过改变颤振的设置,让它在未来的所有应用程序中都能全局执行。Gradle文件位于您的默认构建部分。如果你使用VSCode

  1. 转到此位置(或已安装颤振的位置) C: \ src \ flutter_tools \ gradle \ \颤振\包李< / >
  2. 拖动颤振。gradle文件到VSCode
  3. 更新最小值、编译和/或目标版本
  4. 保存

将您编译的sdk版本升级到29或更高

希望这对你有所帮助。

< p >这工作。使用新版本,现在可以直接从IDE更改它。 https://www.youtube.com/watch?v=ztjCMzBX18w < / p >

这里详细的解决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。属性 < / >

删除现有的行,并将其粘贴到应用程序级别构建。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
}

enter image description here

你可以用which flutter找到这个文件夹(在mac或linux上),或者在windows中你可以在这里找到https://stackoverflow.com/a/304447/8122500。 然后你可以按照@francis-nduba-numbi的指导

有两种类型可以改变

  1. from flutter.gradle(建议更改为not spifc /for future)
  2. 或直接从build.gradle(不推荐)
    **android/local.properties**
flutter.versionCode=1
flutter.minSdkVersion=21
flutter.targetSdkVersion=30
flutter.compileSdkVersion=31


**android/app/build.gradle**
minSdkVersion localProperties.getProperty('flutter.minSdkVersion').toInteger()


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

当我最近遇到这个问题时,我是这样处理的:

内部<your-project>/android/app/build.gradle

查找android >defaultConfig→minSdkVersion并将其替换为

minSdkVersion Math.max(flutter.minSdkVersion, 21)

这里的21可以替换为你想要的最小版本。

如果flutter开始支持23或其他更高版本作为最低版本,并且您决定为项目升级flutter,那么它仍然可以工作。

android/app/build.gradel minSdkVersion 30中尝试一下,应该会修复它,但请确保你的kotlin版本位于kotlin_version = '1.6.10'