Flutter运行报错:Gradle7.2.1下manifest出现意外<queries>元素
报错根因
两个报错均为构建工具链版本不匹配导致:
unexpected element <queries> found in <manifest><application>报错:要么是Android Gradle Plugin(AGP)版本过低,不支持Android 11新增的清单查询标签;要么是<queries>标签在AndroidManifest.xml中放置的层级错误。Unsupported class file major version 62报错:class版本号62对应Java 18,AGP 7.3及以下版本最高仅支持到Java 17,M1芯片Mac上Android Studio默认绑定的JDK版本较高,降级Gradle后无法识别高版本JDK编译的类文件就会触发该错误。
修复步骤
- 对齐Gradle与AGP的兼容版本
打开gradle/wrapper/gradle-wrapper.properties文件,将distributionUrl字段修改为指向Gradle 7.4.2版本的二进制包
打开项目根目录下的build.gradle文件,将AGP依赖修改为classpath 'com.android.tools.build:gradle:7.4.2'
*7.4.2版本AGP原生支持<queries>标签,同时完美兼容M1 ARM架构,不需要额外引入兼容插件。 - 固定Gradle使用的JDK版本
打开Android Studio,依次进入Settings > Build, Execution, Deployment > Build Tools > Gradle,将Gradle JDK选项设置为Android Studio自带的JDK 17,同时勾选Use Gradle from: gradle-wrapper.properties,不要手动指定本地安装的高版本JDK。 - 清理构建缓存
在项目根目录终端依次执行如下命令:flutter clean cd android && ./gradlew clean && cd .. flutter pub get - 校验清单文件层级
打开android/app/src/main/AndroidManifest.xml,确认<queries>标签直接嵌套在<manifest>根节点下,与<application>标签平级,禁止将<queries>放在<application>标签内部。正确层级参考:<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="your.app.package"> <!-- queries标签必须和application平级 --> <queries> <intent> <action android:name="android.intent.action.VIEW" /> </intent> </queries> <application android:name="${applicationName}" android:icon="@mipmap/ic_launcher" android:label="your_app_name"> <!-- Activity、Service等组件配置 --> </application> </manifest>
注意:不需要降级Gradle版本,强制降级只会触发JDK版本不兼容问题,按上述步骤对齐版本后重新运行即可正常构建。
内容的提问来源于stack exchange,提问作者Piclou
相关产品推荐
相关产品推荐

