我正在尝试为一个使用蓝牙通信的应用程序启动一个颤振项目。我用的是颤振蓝。
不幸的是,当试图运行(在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与颤振,以及如何?
增加minSdkVersion确实是可能的,但它花了我太多的时间来找到它,因为谷歌搜索主要产生的结果是关于绝对最小Sdk版本flutter应该能够支持的讨论,而不是如何在你自己的项目中增加它。
就像在Android Studio项目中,你必须编辑构建。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"
}
现在看起来很明显,但我花了很长时间才自己想明白。
我在我的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占位符
使用新的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或以上
构建。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
}
你应该从慢车转车。以下属性说明:
首先进入android->local.properties
从这里开始变化
像这样改变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。您是否看到您将总是被迫为每个新项目手动更改?
以上所有建议都很好,但不是最好的,因为您将被迫调整构建。为你创建的每个新项目Gradle。
最好的方法是从全局minSdkVersion变量的源修改它的值,这样所有的项目,无论是新项目还是旧项目,都将采用它。记得颤振。minSdkVersion表示变量在flutter目录下(包含sdk)。
问题文件是flutter.gradle。
地址为:flutter-directory/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 2.8之后更改SdkVersion时,以下方式是最好的:
转到安装flutter的根目录。应该是这样的
C:\src\flutter\flutter
然后转到
packages>Flutter tools>gradle>
在Gradle中,你会看到很多文件,找到flutter。gradle。右键单击它,用文本编辑器/记事本编辑它。
在这里你可以找到所有的SDK版本。更改它们,保存,然后就可以开始了
完整的路径应该是这样的:(在我的例子中)
C:\src\flutter\flutter\packages\flutter_tools\gradle
添加以下行到android/local。属性文件:
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 (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
}
一旦所有这些都完成了,你就可以开始了。下次你想要更新一些东西时,你只需要更改一个文件。
这里详细的解决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
删除现有的行,并将其粘贴到应用程序级别构建。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
}