升级Gradle至4版本后Android项目构建错误求助
Hey there, I’ve run into this exact variant matching issue before when upgrading to Android Gradle Plugin (AGP) 4.x—those strict new variant resolution rules can throw a wrench in things, especially with libraries like Volley. Let’s break down how to fix it:
Why This Happens
AGP 4.x introduced more precise variant matching that checks all attribute values between your project and dependencies. The error means Gradle is seeing multiple Volley variants (like the android-aidl one) that partially match your project’s debug build type, but it can’t pick a single valid one because unrequested attributes are present.
Step-by-Step Solutions
1. Force Gradle to Pick the Correct Variant
Add this resolution strategy to your module-level build.gradle (the one for your app module, not the project root):
configurations.all { resolutionStrategy { // Replace with your actual Volley version force 'com.android.volley:volley:1.2.1' eachDependency { details -> if (details.requested.group == 'com.android.volley' && details.requested.name == 'volley') { details.useVariant { variant -> variant.attributes { // Explicitly match the debug build type attribute( com.android.build.api.attributes.BuildTypeAttr, project.objects.named(com.android.build.api.attributes.BuildTypeAttr, 'debug') ) // Specify we need the standard classes artifact, not aidl attribute( com.android.build.api.attributes.ArtifactTypeAttr, project.objects.named(com.android.build.api.attributes.ArtifactTypeAttr, 'android-classes') ) } } } } } }
This tells Gradle exactly which Volley variant to use, eliminating the ambiguity.
2. Verify Your Volley Dependency Declaration
Double-check that your Volley dependency is correctly declared in the same module-level build.gradle:
dependencies { implementation 'com.android.volley:volley:1.2.1' // Use your target version }
Avoid adding any extra suffixes or variant-specific declarations unless you explicitly need them.
3. Clean and Rebuild Your Project
Old Gradle cache can sometimes cause false variant mismatches. Run these commands in your terminal:
./gradlew clean ./gradlew assembleDebug
This clears stale build files and forces a fresh build with your new configuration.
4. Adjust Local Volley Module (If You’re Using a Fork)
If Volley is a local module in your project (not a remote dependency), update its module-level build.gradle to ensure variants are properly configured:
android { // ... your existing config variantFilter { variant -> if (variant.buildType.name == 'debug') { variant.outputs.each { output -> output.attributes.attribute( com.android.build.api.attributes.ArtifactTypeAttr, project.objects.named(com.android.build.api.attributes.ArtifactTypeAttr, 'android-classes') ) } } } }
This ensures the local Volley module only exposes the artifact type your main project needs.
Final Check
After making these changes, sync your Gradle files and run a build. The variant matching error should disappear once Gradle has a clear, single variant to resolve.
内容的提问来源于stack exchange,提问作者efecetir

