【问题标题】:How to fix "unexpected element <queries> found in <manifest>" error?如何修复“<manifest> 中发现的意外元素 <queries>”错误?
【发布时间】:2020-11-08 04:49:45
【问题描述】:

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

unexpected element <queries> found in <manifest>

我该如何解决?

【问题讨论】:

    标签: android flutter android-gradle-plugin android-manifest manifest


    【解决方案1】:

    Android Gradle 插件需要了解新的清单元素,尤其是 对于清单合并过程。如果插件有混淆的趋势 在清单合并中看到它无法识别的元素,扔掉 构建问题中的错误。

    在这种情况下,Android 11 引入了 &lt;queries&gt; 作为清单元素,而旧版本的 Android Gradle 插件不知道该元素。

    从清单合并中发生的事实意味着只需升级依赖项 可能会导致这个错误。例如,如果您升级到最新 com.awesome:awesome-library 的版本,它包含一个 &lt;queries&gt; 元素 在其清单中,您可能会因构建中的上述错误而崩溃, 即使您的代码没有任何其他更改。

    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.* 系列中),你应该没问题 任何变化。那些插件版本已经知道&lt;queries&gt;

    请参阅this Android Developers Blog post 了解更多信息。

    【讨论】:

    • “Google 发布了一系列补丁版本的 Android Gradle 插件来解决这个问题”如果您不想解决与升级 gradle 插件版本相关的问题,请注意。
    • 我的构建工具版本是 3.5.0。我已经升级到 3.5.4,它解决了这个问题。很好的解释
    • 太棒了!对于 Unity,编辑路径中的文件。 -> /Unity/Hub/Editor/2019.4.20f1/Editor/Data/PlaybackEngines/AndroidPlayer/Tools/GradleTemplates/baseProjectTemplate.gradle
    • 一个很好的解释.. 就我而言,我通过将 Android Studio v3.5.2 上的 gradle 版本从:classpath 'com.android.tools.build:gradle:3.5.1' 稍微升级到: 类路径 'com.android.tools.build:gradle:3.5.4'
    • 天哪!这对我来说很清楚。我已经徘徊了一个星期,现在试图找出那个查询标签有问题!我在 Unity 中遇到此错误。我将升级到使用更新版本的 Gradle 的最新版本,看看它是否修复它。非常感谢这个人!上帝保佑你!
    【解决方案2】:

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

    按照这些步骤进行

    1. 阅读这篇简短的博客以获得一些了解:click here
    1. 删除android文件夹内的.gradle文件夹即android>.gradle

    2. 在项目build.gradle文件中,根据上面链接中的博客适当升级你的类路径,例如我升级到classpath 'com.android.tools.build:gradle:4.0.1'

    3. 也升级分发网址。它在 android>gradle>gradle-wrapper.properties 文件中适当。比如我把它升级到distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip

    4. 您可以使缓存无效并重新启动您的 android studio。确保您有良好的互联网连接,因为它会下载新的 gradle 文件。

    谢谢。

    【讨论】:

    • 这也适用于 react native,非常有用
    • classpath 'com.android.tools.build:gradle:4.1.2' distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-all.zip 我还是遇到问题如何解决?
    • 更新后是否使缓存失效?
    • 救命稻草。谢谢!!。这个答案有原因和解决方案。
    • 遇到 dexGuard 问题:支持的版本包括 [2.3.0:3.5.*]
    【解决方案3】:

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

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

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

    当前设置:

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

    问题马上就解决了。 :)

    【讨论】:

    • 你的方法是最好的解决方案,很简单
    • 我用你的回答解决了这个问题。我有 Android Studio 4.2.1 谢谢!
    • 最好!像魅力一样工作
    • 太棒了!像魅力一样工作。
    • 可以确认这适用于 Android Studio 4.2.1 和 Flutter 2(我从 1.22.6 迁移)
    【解决方案4】:

    对于颤振

    要了解为什么会发生这种情况,请参阅上述@CommonsWare 的回答

    这是因为 &lt;queries&gt; 标签引入了适用于 Android 11 及更高版本 (SDK 30+) 的新包可见性选项。因此,您需要使用包含此更改的版本更新您的 build.gradle。以下是支持的 gradle 选项列表。

    处理这些错误的最佳解决方案是升级您的 Android Gradle 插件Update Gradle

    您必须将 Gradle 版本更新为具有最新查询标签(Android 11 引入)的兼容版本之一。

    更新 Android Gradle 插件

    YourAppDirectory/android/build.gradle 文件中指定插件版本。该插件版本适用于该 Android Studio 项目中内置的所有模块。以下示例将插件设置为 4.0.1 版本:

    buildscript {
        repositories {
            // Gradle 4.1 and higher include support for Google's Maven repo using
            // the google() method. And you need to include this repo to download
            // Android Gradle plugin 3.0.0 or higher.
            google()
            ...
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:4.0.1’
        }
    

    如果指定的插件版本尚未下载,Gradle 会在您下次构建项目时下载它或点击 工具 > Android > 将项目与 Gradle 同步Android Studio 菜单栏中的文件

    更新 Gradle

    通过编辑 YourAppDirectory/android/gradle/wrapper/gradle-wrapper.properties 文件中的 Gradle 分发参考来指定 Gradle 版本。

    不要忘记在您的gradle-wrapper.properties 中更新您的ditributionUrl。例如,对于 gradle 4.0.1,您应该:

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

    不过,我们知道并非所有人都准备好升级到最新版本,而且您可能依赖于旧版本的 Gradle 或与 4.1 不兼容的库。

    【讨论】:

    • classpath 'com.android.tools.build:gradle:4.1.2' distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.2-all.zip 我还是遇到问题如何解决?
    • 更新后,我从 Flutter 收到另一个错误,建议降级 lol:issuetracker.google.com/issues/158060799
    【解决方案5】:

    修复错误非常简单。 将您的 android studio 更新到最新版本 并使用最后一个稳定的 Gradle 插件版本。 目前,我使用 Android Studio 版本 4.1.3Gradle Plugin 6.8.2

    请大家注意,使用查询你应该在应用程序标签外面写查询代码而不是里面应用程序标签

    更多信息见下图

    【讨论】:

    • 非常重要请大家注意,对于使用查询,您应该在应用程序标签外而不是应用程序标签内编写查询代码
    【解决方案6】:

    我在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
    

    然后它工作正常。

    【讨论】:

      【解决方案7】:

      由于 Android 11package visibility 的新默认设置和功能需要添加 &lt;queries&gt;,因此您必须更新您的 android gradle 插件。

      Google 已为此处列出的当前版本添加了一些补丁:

      https://developer.android.com/studio/releases/gradle-plugin.html?buildsystem=cmake#4-0-0

      如果你想使用更新版本的 android gradle,你应该从这里搜索兼容的包装器:

      https://developer.android.com/studio/releases/gradle-plugin.html?buildsystem=cmake#updating-gradle

      【讨论】:

        【解决方案8】:

        将您的 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+

        您可以在https://stackoverflow.com/a/35272475/10184868查看分布图

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-03-18
          • 2021-03-15
          • 1970-01-01
          • 2023-03-18
          • 2022-01-24
          • 1970-01-01
          • 2021-06-13
          • 2021-04-17
          相关资源
          最近更新 更多