如何在flutter项目中更改Android minSdkVersion
How to change Android minSdkVersion in flutter project
我正在尝试为使用蓝牙进行通信的应用程序启动一个 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,但我花了太多时间才找到它,因为 google 搜索大部分结果是关于 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"
}
现在看起来很明显,但我花了足够长的时间自己弄清楚。
您可以更改文件中的 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"
}
按照以下步骤更改 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
}
如果您的应用需要特定的最低版本的 Android 平台,您可以在应用的 build.gradle
文件中将该版本要求指定为 API 级别设置。在构建过程中,这些设置会合并到应用程序的清单文件中。指定 API 级别要求可确保您的应用只能安装在 运行 兼容 Android 平台版本的设备上。
您必须在位于 <app dir>/android/app
的 build.gradle
文件中设置 minSdkVersion
,并在 defaultConfig
块中设置一个值:
有两个 API 级别设置可用:
minSdkVersion
— 应用 运行 平台的 Android 平台的最低版本,由平台的 API 级别标识符指定。
targetSdkVersion
- 指定应用程序设计为 运行 的 API 级别。在某些情况下,这允许应用程序使用目标 API 级别中定义的清单元素或行为,而不是仅限于使用为最低 API 级别定义的元素或行为。
要在 build.gradle
文件中指定默认 API 级别要求,请将上述一项或多项设置添加到嵌套在 android {}
块中的 defaultConfig {}
块中.您还可以通过将设置添加到构建类型或产品风格来覆盖不同版本应用程序的这些默认值。以下 build.gradle
文件指定了 defaultConfig {}
块中的默认 minSdkVersion
和 targetSdkVersion
设置,并覆盖了一种产品口味的 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 manifest element documentation and the API Levels 文档。
我在 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”执行失败。
Manifest merger failed : Attribute data@scheme at AndroidManifest.xml requires a placeholder substitution but no value for is provided.
解决方案是这样添加 manifestPlaceholders
第一个运行
颤抖干净
然后修改文件中的minSdkVersion Project_Name/android/app/build.gradle , defaultconfig :
它位于 [project_name]/android/app/build.gradle 的默认配置中。默认配置
使用新的 Flutter 项目 (2.8.0),使用 'Flutter style',您可以在 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
}
}
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
更改:
- 先去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
}
对于 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()
从属性文件中读取值。
app/build.gradle
add this version code
如果你不知道,Google Playstore 只允许 minSdkVersion 为 20 或以上。但是 flutter 还是默认设置了 minSdkVersion 为 16。你能看到你总是不得不为每个新项目手动更改吗?
你上面的建议都不错,但都不是最好的,因为你会被逼着去磨合 build.gradle 对于您创建的每个新项目。
最好的办法是从源码中修改global minSdkVersion变量的值,这样所有项目无论新旧都会采用它。记住flutter.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 上制作的视频,解释如下:flutter configure minSdkVersion from 16 to 20 or above
设置minSdkVersion、targetSdkVersion和compileSdkVersion从Flutter 2.8开始有点不同。现在 your_flutter_app/android/app/build.gradle
路径中的 gradle 文件如下所示:
只需将当前值替换为您想要的版本号,如下所示:
现在 运行 你的 flutter 项目,仅此而已。
所有答案都是最好的。但在 Flutter 2.8 之后更改 SdkVersion 最好采用以下方式:
转到安装flutter的根目录。应该是
C:\src\flutter\flutter
然后前往
packages>Flutter tools>gradle>
在Gradle中,你会看到很多文件,找到flutter.gradle。 Right-click 并用文本 editor/notepad 编辑它。
在这里您可以找到所有的 SDK 版本。更改它们,保存,然后就可以开始了
完整的路径应该是这样的:(在我的例子中)
C:\src\flutter\flutter\packages\flutter_tools\gradle
在当前版本的 flutter (2.10.4) 中,您应该通过进入
Flutter sdk folder/packages/open flutter_tools 打开 /gradle 然后打开 flutter.gradle 找到 static int minSdkVersion 并根据要求更改
例如:
C:\Workspace\flutter\packages\flutter_tools\gradle\flutter.gradle
默认配置{
// TODO:指定您自己的唯一应用程序 ID (https://developer.android.com/studio/build/application-id.html)。
应用程序 ID“com.example.map”
minSdkVersion 19
targetSdkVersion flutter.targetSdkVersion
版本代码 flutterVersionCode.toInteger()
版本名称 flutterVersionName
}
将以下行添加到 android/local.properties 文件:
flutter.versionCode=1
flutter.versionName=0.0.1
flutter.flutterMinSdkVersion=24
flutter.flutterTargetSdkVersion=31
在文件top-level处添加以下行可能在文件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'
}
最后编辑build.gradle匹配的部分如下:
defaultConfig {
applicationId "do.main.subdomain" // Use your App ID
minSdkVersion flutterMinSdkVersion.toInteger()
targetSdkVersion flutterTargetSdkVersion.toInteger()
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
完成所有这些后,您就可以开始了。下次想更新的时候只需要修改一个文件即可。
我正在尝试为使用蓝牙进行通信的应用程序启动一个 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,但我花了太多时间才找到它,因为 google 搜索大部分结果是关于 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"
}
现在看起来很明显,但我花了足够长的时间自己弄清楚。
您可以更改文件中的 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"
}
按照以下步骤更改 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
}
如果您的应用需要特定的最低版本的 Android 平台,您可以在应用的 build.gradle
文件中将该版本要求指定为 API 级别设置。在构建过程中,这些设置会合并到应用程序的清单文件中。指定 API 级别要求可确保您的应用只能安装在 运行 兼容 Android 平台版本的设备上。
您必须在位于 <app dir>/android/app
的 build.gradle
文件中设置 minSdkVersion
,并在 defaultConfig
块中设置一个值:
有两个 API 级别设置可用:
minSdkVersion
— 应用 运行 平台的 Android 平台的最低版本,由平台的 API 级别标识符指定。targetSdkVersion
- 指定应用程序设计为 运行 的 API 级别。在某些情况下,这允许应用程序使用目标 API 级别中定义的清单元素或行为,而不是仅限于使用为最低 API 级别定义的元素或行为。
要在 build.gradle
文件中指定默认 API 级别要求,请将上述一项或多项设置添加到嵌套在 android {}
块中的 defaultConfig {}
块中.您还可以通过将设置添加到构建类型或产品风格来覆盖不同版本应用程序的这些默认值。以下 build.gradle
文件指定了 defaultConfig {}
块中的默认 minSdkVersion
和 targetSdkVersion
设置,并覆盖了一种产品口味的 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 manifest element documentation and the API Levels 文档。
我在 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”执行失败。
Manifest merger failed : Attribute data@scheme at AndroidManifest.xml requires a placeholder substitution but no value for is provided.
解决方案是这样添加 manifestPlaceholders
第一个运行 颤抖干净
然后修改文件中的minSdkVersion Project_Name/android/app/build.gradle , defaultconfig :
它位于 [project_name]/android/app/build.gradle 的默认配置中。默认配置
使用新的 Flutter 项目 (2.8.0),使用 'Flutter style',您可以在 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
}
}
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
更改:
- 先去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
}
对于 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()
从属性文件中读取值。
app/build.gradle
add this version code
如果你不知道,Google Playstore 只允许 minSdkVersion 为 20 或以上。但是 flutter 还是默认设置了 minSdkVersion 为 16。你能看到你总是不得不为每个新项目手动更改吗?
你上面的建议都不错,但都不是最好的,因为你会被逼着去磨合 build.gradle 对于您创建的每个新项目。
最好的办法是从源码中修改global minSdkVersion变量的值,这样所有项目无论新旧都会采用它。记住flutter.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 上制作的视频,解释如下:flutter configure minSdkVersion from 16 to 20 or above
设置minSdkVersion、targetSdkVersion和compileSdkVersion从Flutter 2.8开始有点不同。现在 your_flutter_app/android/app/build.gradle
路径中的 gradle 文件如下所示:
只需将当前值替换为您想要的版本号,如下所示:
现在 运行 你的 flutter 项目,仅此而已。
所有答案都是最好的。但在 Flutter 2.8 之后更改 SdkVersion 最好采用以下方式:
转到安装flutter的根目录。应该是
C:\src\flutter\flutter
然后前往
packages>Flutter tools>gradle>
在Gradle中,你会看到很多文件,找到flutter.gradle。 Right-click 并用文本 editor/notepad 编辑它。
在这里您可以找到所有的 SDK 版本。更改它们,保存,然后就可以开始了
完整的路径应该是这样的:(在我的例子中)
C:\src\flutter\flutter\packages\flutter_tools\gradle
在当前版本的 flutter (2.10.4) 中,您应该通过进入 Flutter sdk folder/packages/open flutter_tools 打开 /gradle 然后打开 flutter.gradle 找到 static int minSdkVersion 并根据要求更改
例如: C:\Workspace\flutter\packages\flutter_tools\gradle\flutter.gradle
默认配置{ // TODO:指定您自己的唯一应用程序 ID (https://developer.android.com/studio/build/application-id.html)。 应用程序 ID“com.example.map” minSdkVersion 19 targetSdkVersion flutter.targetSdkVersion 版本代码 flutterVersionCode.toInteger() 版本名称 flutterVersionName }
将以下行添加到 android/local.properties 文件:
flutter.versionCode=1
flutter.versionName=0.0.1
flutter.flutterMinSdkVersion=24
flutter.flutterTargetSdkVersion=31
在文件top-level处添加以下行可能在文件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'
}
最后编辑build.gradle匹配的部分如下:
defaultConfig {
applicationId "do.main.subdomain" // Use your App ID
minSdkVersion flutterMinSdkVersion.toInteger()
targetSdkVersion flutterTargetSdkVersion.toInteger()
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
}
完成所有这些后,您就可以开始了。下次想更新的时候只需要修改一个文件即可。