Android平台Shadow Gradle Plugin问题:生成AAR时提示shadowJar()方法未找到
解决Shadow Gradle Plugin生成AAR时的"Could not find method shadowJar()"错误
当然有人成功用Shadow Gradle Plugin生成AAR啦!你遇到的这个错误,核心原因是Shadow插件默认的shadowJar()任务是给Java库设计的,而Android Library项目用的是com.android.library插件,它和Java库的任务体系不一样,所以直接调用shadowJar会找不到这个方法。
下面给你一套可行的配置方案,帮你生成包含依赖的胖AAR:
1. 先调整插件版本(建议升级)
首先确保Shadow插件版本和你的Android Gradle Plugin(AGP)兼容,比如AGP 7.x可以用Shadow 7.1.2,AGP 8.x可以用Shadow 8.1.1。修改插件配置:
plugins { id 'com.android.library' id 'kotlin-android' id 'com.github.johnrengelman.shadow' version '7.1.2' // 根据AGP版本调整 }
2. 替换原有的shadowJar配置
删掉原来单独的shadowJar块,添加以下自定义任务配置:
android { // 保留你原来的Android配置(compileSdk、defaultConfig等) ... } // 第一步:生成包含所有依赖的胖JAR(基于Release变体) task shadowReleaseJar(type: com.github.jengelman.gradle.plugins.shadow.tasks.ShadowJar) { // 确保先完成编译和资源合并再打包 dependsOn 'compileReleaseKotlin' dependsOn 'mergeReleaseResources' // 指定要打包的内容:源码、编译后的类文件、合并后的资源 from android.sourceSets.main.java.srcDirs from android.sourceSets.main.kotlin.srcDirs from fileTree(dir: "${buildDir}/intermediates/javac/release/classes", include: '**/*.class') from fileTree(dir: "${buildDir}/intermediates/kotlin-classes/release", include: '**/*.class') from fileTree(dir: "${buildDir}/intermediates/merged_resources/release", include: '**/*') // 配置最终归档的名称(按需修改) archiveBaseName.set('shadow') archiveClassifier.set('') archiveVersion.set('') // 可选:排除不需要打包的依赖或类 // exclude 'androidx/core/**' } // 第二步:将胖JAR替换进AAR,生成最终的胖AAR task shadowReleaseAar(type: Zip) { dependsOn shadowReleaseJar dependsOn 'assembleRelease' // 先生成基础的Release AAR // 解压基础AAR作为模板 from zipTree("${buildDir}/outputs/aar/${project.name}-release.aar") // 替换原有的classes.jar为Shadow生成的胖JAR delete 'classes.jar' from zipTree(shadowReleaseJar.archiveFile) // 配置输出的AAR信息 archiveBaseName.set('shadow-release') archiveExtension.set('aar') destinationDirectory.set(file("${buildDir}/outputs/shadow-aar")) }
3. 执行任务生成AAR
在终端运行以下命令:
# 先生成基础的Release AAR ./gradlew assembleRelease # 再生成包含所有依赖的胖AAR ./gradlew shadowReleaseAar
最终的AAR会输出在build/outputs/shadow-aar/目录下。
注意事项
- 如果需要针对Debug变体生成,只需要把任务名里的
Release改成Debug,对应调整依赖的任务即可。 - 确保Shadow插件版本和AGP版本兼容,如果出现版本冲突,参考Shadow插件的版本适配说明调整即可。
内容的提问来源于stack exchange,提问作者gelojavonitalla




