如何修复“在 <queries> 中发现意外元素 <manifest>”错误?

问题描述 投票:0回答:8

突然间,我在我的 Android 项目中遇到了这个构建错误:

unexpected element <queries> found in <manifest>

如何解决?

android android-gradle-plugin android-manifest manifest
8个回答
398
投票

Android Gradle 插件需要了解新的清单元素,特别是 用于清单合并过程。该插件有可能会变得混乱,如果 看到清单合并中它无法识别的元素,将其丢弃 构建错误,如问题中的错误。

在这种情况下,Android 11 引入了

<queries>
作为清单元素,而旧版本的 Android Gradle 插件不知道该元素。

这种情况发生在清单合并中,这意味着只需升级依赖项即可 可能会带来这个错误。例如,如果您升级到最新版本

com.awesome:awesome-library
的版本,它包含一个
<queries>
元素 在其清单中,您可能会因构建中的上述错误而崩溃, 即使您的代码没有任何其他更改。

Google 发布了一系列 Android Gradle 插件的补丁版本来解决这个问题:

  • 3.3.3
  • 3.4.3
  • 3.5.4
  • 3.6.4
  • 4.0.1

如果您使用的是

3.3.*
4.0.*
系列中的现有插件,请升级 从该列表中添加到相关的补丁版本(或更高版本),并且您不应该再 遇到该错误(例如,
classpath 'com.android.tools.build:gradle:4.0.1'
)。

如果您使用的是 Android Studio 4.1 或更高版本,并且有匹配的 Android Gradle 插件(例如,在

4.1.*
系列中),你应该没问题 任何变化。这些插件版本已经意识到了
<queries>

请参阅这篇 Android 开发者博客文章了解更多信息。


102
投票

我在 Flutter 中遇到了这个问题,但我相信这个解决方案适用于 Flutter 和原生 Flutter 开发。

按照以下步骤操作

  1. 阅读这篇简短的博客文章以获得一些了解:准备 Gradle 构建以实现 Android 11 中的包可见性

  2. 删除Android文件夹内的.gradle文件夹,即android > .gradle

  3. 在项目build.gradle文件中,根据上面链接中的博客适当升级你的类路径,例如我升级到

    classpath 'com.android.tools.build:gradle:4.0.1'

  4. 也升级分发 URL。它位于 android>gradle>gradle-wrapper.properties 文件中。例如,我将其升级为

    distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip 

  5. 您可以使缓存无效并重新启动 Android Studio。确保您有良好的互联网连接,因为它将下载新的 Gradle 文件。


84
投票

两天前我在 Android Studio 4.1.1 中也突然遇到了同样的问题。我通过升级构建 Gradle 版本解决了这个问题。

项目的 build.gradle 文件中之前的设置是:

classpath("com.android.tools.build:gradle:3.5.3")

当前设置:

classpath("com.android.tools.build:gradle:3.5.4")

问题立即消失。 :)


76
投票

将您的 Android Studio 更新到最新版本 并使用最后一个稳定的 Gradle 插件版本。 目前,我使用 Android Studio 版本 4.1.3Gradle Plugin 6.8.2

要在 queries 中使用,您应该在 application 标记之外编写 queries 代码,而不是在 application 标记内。

欲了解更多信息,请参阅下面的照片:


16
投票

我在

react-native-image-crop-picker
库中遇到了这个错误,我通过更新 Gradle 版本解决了这个问题,如前面的答案中所述。

是:

classpath("com.android.tools.build:gradle:3.5.3")

更新为:

classpath("com.android.tools.build:gradle:3.5.4")

我跑了:

cd android && ./gradlew clean && cd .. && npx react-native run-android

然后就OK了。


1
投票

由于 Android 11包可见性的新默认设置和功能需要添加

<queries>
,您必须更新您的 Android Gradle 插件。

Google 已在 Android Gradle 插件发行说明 4.0.0(2020 年 4 月)中列出的当前版本添加了一些补丁。

如果您想使用较新版本的 Android Gradle,您应该从 Android Gradle 插件发行说明、更新 Gradle 中搜索兼容的包装器。


0
投票

将 Gradle 版本更新到 4.0.1 或更高版本。

文件 android/gradle/wrapper/gradle-wrapper.properties:将分发 URL 更新为:

distributionUrl=https://services.gradle.org/distributions/gradle-6.7-all.zip

文件android/build.gradle:更新Gradle插件:

类路径'com.android.tools.build:gradle:4.1.2'

到 4.0.1 或更高版本。这里是 4.1.2,Gradle 版本为 6.5 或更高版本。

您可以在如何在android studio中更新gradle?

查看分布图

0
投票

从 AGP 8.x 开始,收到警告时:

Unknown element under <manifest>: queries at /data/app/***/base.apk Binary XML file line #11

运行时会发生这种情况,例如。在 Android 10 上。这不是清单合并,它不知道元素,但它是设备上的清单解析器。遗憾的是,该属性

tools:targetApi="R"
并未被纳入合并清单中。除非创建具有两个不同清单的现代和遗留构建类型,否则最好的办法就是忽略警告。

© www.soinside.com 2019 - 2024. All rights reserved.