CommonsWare
CommonsWare

Reputation: 1007474

How can I fix "unexpected element <queries> found in <manifest>" error?

All of a sudden, I am getting this build error in my Android project:

unexpected element <queries> found in <manifest>

How do I fix it?

Upvotes: 228

Views: 181588

Answers (8)

Martin Zeitler
Martin Zeitler

Reputation: 76799

As of AGP 8.x, when getting the warning:

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

This happens when running eg. on Android 10. It's not the manifest-merger, which doesn't know the element, but it is the manifest-parser on the device. The property tools:targetApi="R" sadly is not being baked into the merged manifest. Unless creating a modern and legacy build-type with two different manifests, the best one can do is to ignore the warning.

Upvotes: 1

kiumars gilanizadeh
kiumars gilanizadeh

Reputation: 1192

Update your Android Studio to the last version and use the last stable Gradle plugin version. At the current time, I use Android Studio version 4.1.3 with Gradle Plugin 6.8.2

For use in queries, you should write queries code in out of application tag, not inside application tag.

For more information, see the photo below:

https://i.sstatic.net/ks0AY.jpg

Upvotes: 79

Hitesh Prajapati
Hitesh Prajapati

Reputation: 1411

I also suddenly had the same issue two days ago in Android Studio 4.1.1. I solved the issue by upgrading the build Gradle version.

Previous setting in the build.gradle file of the project was:

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

Current setting:

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

The issue was gone immediately. :)

Upvotes: 84

Jefferson Patricio
Jefferson Patricio

Reputation: 161

I had this error in the react-native-image-crop-picker library, and I solved this problem by updating the Gradle version as mentioned in previous answers.

It was:

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

Updated to:

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

And I ran a:

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

Then it worked OK.

Upvotes: 16

Bukunmi
Bukunmi

Reputation: 2574

I had this issue in Flutter, but I believe this solution will work for both Flutter and native Flutter development.

Follow these steps

  1. Read this short blog post to get some understanding: Preparing your Gradle build for package visibility in Android 11

  2. Delete the .gradle folder inside the Android folder, i.e., android > .gradle

  3. In the project build.gradle file, upgrade your class path appropriately based on the blog in the link above, e.g., I upgraded to classpath 'com.android.tools.build:gradle:4.0.1'

  4. Upgrade the distribution URL too. It's in android>gradle>gradle-wrapper.properties file appropriately. E.g., I upgraded it to distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip

  5. You can invalidate caches and restart your Android Studio. Make sure you have a good Internet connection, because it will download the new Gradle files.

Upvotes: 102

Mahmoud Mabrok
Mahmoud Mabrok

Reputation: 1482

Due to the new default settings and features for package visibility in Android 11 that need to add <queries>, you must update your Android Gradle plugin.

Google has added some patches to current versions listed in Android Gradle plugin release notes, 4.0.0 (April 2020).

If you want to use a newer version of Android Gradle, you should search for a compatible wrapper from Android Gradle plugin release notes, Update Gradle.

Upvotes: 1

akash maurya
akash maurya

Reputation: 656

Update your Gradle version to 4.0.1 or later.

File android/gradle/wrapper/gradle-wrapper.properties: update the distribution URL to:

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

File android/build.gradle: update the Gradle plugin:

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

to 4.0.1 or later. Here it is 4.1.2 with Gradle version to 6.5 or later.

You can see the distribution chart at How to update gradle in android studio?

Upvotes: 0

CommonsWare
CommonsWare

Reputation: 1007474

The Android Gradle Plugin needs to know about new manifest elements, particularly for the manifest merger process. The plugin has a tendency to get confused if it sees elements in the manifest merger that it does not recognize, tossing out build errors like the one in the question.

In this case, Android 11 introduced <queries> as a manifest element, and older versions of the Android Gradle Plugin do not know about that element.

The fact that this occurs from manifest merger means that simply upgrading a dependency might bring about this error. For example, if you upgrade to the latest version of com.awesome:awesome-library, and it contained a <queries> element in its manifest, you might crash with the aforementioned error in your builds, even without any other changes in your code.

Google released a series of patch versions of the Android Gradle Plugin to address this:

  • 3.3.3
  • 3.4.3
  • 3.5.4
  • 3.6.4
  • 4.0.1

If you are using an existing plugin in the 3.3.* through 4.0.* series, upgrade to the associated patch version (or higher) from that list, and you should no longer run into that error (e.g., classpath 'com.android.tools.build:gradle:4.0.1').

If you are using Android Studio 4.1 or higher, with a matching Android Gradle Plugin (e.g., in the 4.1.* series), you should be fine without any changes. Those plugin versions were already aware of <queries>.

See this Android Developers Blog post for more.

Upvotes: 398

Related Questions