升级至Java 11后Android Studio执行./gradlew lintFooDebug命令报NestMember requires ASM7错误的求助
./gradlew lintFooDebug报错"NestMember requires ASM7"的方案 根据你描述的问题——升级到Java 11后执行./gradlew lintFooDebug时,foo:syncDebugLibJars任务因NestMember requires ASM7失败,结合你已经尝试的统一ASM版本、添加依赖等操作,我整理了几个更针对性的解决思路:
1. 强制Gradle全局替换所有ASM依赖为7.x版本
你之前尝试了统一ASM版本,但可能有些隐藏的依赖(比如AGP自身依赖的ASM模块)没有被覆盖。可以在项目根目录的build.gradle中添加全局依赖强制替换:
allprojects { configurations.all { resolutionStrategy { // 替换所有ASM核心及相关模块为7.3.1(ASM7的稳定版本) force 'org.ow2.asm:asm:7.3.1' force 'org.ow2.asm:asm-commons:7.3.1' force 'org.ow2.asm:asm-tree:7.3.1' force 'org.ow2.asm:asm-analysis:7.3.1' force 'org.ow2.asm:asm-util:7.3.1' } } }
添加后执行./gradlew clean --refresh-dependencies刷新依赖,再尝试运行lint任务。
2. 升级Android Gradle Plugin(AGP)到适配Java 11的版本
Java 11对AGP版本有要求(至少AGP 4.0+),旧版本的AGP可能依赖较低版本的ASM,无法处理Java 11引入的Nest成员特性。检查根目录build.gradle中的AGP版本,升级到稳定的高版本(比如7.4.2或8.x):
buildscript { dependencies { classpath 'com.android.tools.build:gradle:7.4.2' // 替换为适配的版本 } }
同时确保Gradle版本与AGP版本匹配(比如AGP 7.4.x对应Gradle 7.5+)。
3. 排查并排除第三方依赖中的旧版ASM冲突
有些第三方库可能会引入旧版本的ASM,导致冲突。使用Gradle的依赖洞察命令定位问题依赖:
./gradlew foo:dependencyInsight --dependency asm
替换foo为你的模块名,查看输出中是否有版本低于7的ASM依赖,然后在对应的模块build.gradle中排除该依赖:
implementation('问题依赖的坐标') { exclude group: 'org.ow2.asm' }
4. 清理本地缓存并重新构建
有时候缓存会导致依赖版本不生效,执行以下命令彻底清理:
./gradlew clean build --refresh-dependencies rm -rf ~/.gradle/caches # 适用于Linux/macOS # Windows用户删除C:\Users\你的用户名\.gradle\caches文件夹
然后重新同步项目并运行lint任务。
5. 检查Java版本配置是否全局生效
确保项目的所有模块都正确配置了Java 11:
在模块的build.gradle中确认:
android { compileOptions { sourceCompatibility JavaVersion.VERSION_11 targetCompatibility JavaVersion.VERSION_11 } kotlinOptions { // 如果用Kotlin的话 jvmTarget = '11' } }
从你的报错栈来看,问题出在AGP的TypedefRemover工具类处理字节码时,使用了低版本的ASM无法识别Java 11的Nest成员特性,所以优先尝试升级AGP和全局替换ASM版本这两个方案,应该能解决问题。
内容的提问来源于stack exchange,提问作者Yvgen

