执行:lint任务遇Java 9字节码/ASM版本冲突问题求助
解决Lint任务中Java 9字节码与ASM版本冲突问题
我之前帮不少开发者处理过这类问题,你遇到的核心矛盾是Android Lint工具依赖的ASM版本过低:Java 9对应的字节码版本是53.0,而ASM 6及以上版本才支持处理这类字节码,你的Lint环境里的ASM版本低于6,所以扫描到包含Java 9 module-info.class的依赖时就会触发报错。下面是几个可行的解决方案:
方案一:升级Android Gradle Plugin(AGP)与Gradle版本
这是最彻底的解决办法,高版本的AGP已经内置了支持Java 9+字节码的ASM版本。比如:
- AGP 4.0及以上版本通常搭配ASM 7+,完全兼容Java 9到Java 16的字节码
- 要注意Gradle版本与AGP版本的兼容性(比如AGP 4.2对应Gradle 6.7.1+)
修改项目根目录的build.gradle文件:
buildscript { repositories { google() mavenCentral() } dependencies { // 示例:升级到AGP 4.2.2(可根据需求选择更高稳定版) classpath 'com.android.tools.build:gradle:4.2.2' } }
同时修改gradle/wrapper/gradle-wrapper.properties中的Gradle下载地址:
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip
方案二:排除依赖中的Java 9模块信息文件
如果暂时无法升级AGP,可以通过Gradle规则,直接排除冲突库中的META-INF/versions/9/module-info.class文件,避免Lint工具扫描到它。
针对你提到的几个依赖,修改模块的build.gradle:
// BouncyCastle依赖 implementation("org.bouncycastle:bcprov-jdk15on:1.64") { exclude files('META-INF/versions/9/module-info.class') } implementation("org.bouncycastle:bcpkix-jdk15on:1.64") { exclude files('META-INF/versions/9/module-info.class') } // Gson依赖 implementation("com.google.code.gson:gson:2.8.6") { exclude files('META-INF/versions/9/module-info.class') } // Kotlin协程依赖 implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2-native-mt") { exclude files('META-INF/versions/9/module-info.class') }
注意:这是临时 workaround,后续新增含Java 9模块信息的依赖时,需要重复添加排除规则。
方案三:强制升级ASM依赖版本
在项目根目录的build.gradle中,通过resolutionStrategy强制指定ASM的版本为6.x或更高,覆盖Lint工具自带的旧版本:
allprojects { repositories { google() mavenCentral() } configurations.all { resolutionStrategy { force 'org.ow2.asm:asm:6.2.1' force 'org.ow2.asm:asm-analysis:6.2.1' force 'org.ow2.asm:asm-commons:6.2.1' force 'org.ow2.asm:asm-tree:6.2.1' force 'org.ow2.asm:asm-util:6.2.1' } } }
注意:这种方式可能和其他插件的ASM依赖产生冲突,需要测试验证项目构建是否正常。
内容的提问来源于stack exchange,提问作者Martin Zeitler
相关产品推荐
相关产品推荐

