Android Studio现有Java项目接入Kotlin构建报lint返回值-1如何解决
这个报错的核心触发点是Kotlin编译任务未正常执行,导致后续注解提取、Lint任务找不到Kotlin编译产物目录,直接返回-1异常,按以下步骤修复即可:
1. 修复配置硬伤
你贴的模块级build.gradle存在明显配置位置错误:kotlin-stdlib依赖被写到了android {}块内部,Gradle不会识别这个位置的依赖声明,直接导致Kotlin编译任务没有被加入任务执行链,自然不会生成build/tmp/kotlin-classes/debug目录。
修正后的模块级配置参考:
apply plugin: 'com.android.application' apply plugin: 'kotlin-android' android { // 保留原有compileSdk、defaultConfig、buildTypes等配置,不要在此处放依赖声明 } // 所有依赖必须放到dependencies块内 dependencies { implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" // 原有其他AndroidX、第三方依赖统一放在此处 }
注意多模块项目下,:Core、:Global这类库模块如果存在Kotlin代码,也要同步加上apply plugin: 'kotlin-android',并在对应模块的dependencies块中引入kotlin-stdlib,不要只在主app模块配置。
2. 修正任务执行顺序
部分老版本AGP和Kotlin插件组合会存在任务依赖缺失问题,注解提取任务会提前于Kotlin编译任务执行,导致找不到产物目录。在模块级build.gradle末尾加如下配置,强制任务执行顺序:
afterEvaluate { android.applicationVariants.all { variant -> def variantCapitalize = variant.name.capitalize() tasks["extract${variantCapitalize}Annotations"].dependsOn("compile${variantCapitalize}Kotlin") } }
如果是库模块,把applicationVariants替换为libraryVariants即可。
3. 验证与缓存清理
- 先在android块内增加lint配置,暂时关闭lint的构建阻断,方便定位核心编译问题:
android { // 原有配置保留 lintOptions { abortOnError false } }
- 执行全量清理,不要只清理全局Gradle缓存,项目本地的构建缓存也要一并删除:
./gradlew clean rm -rf ~/.gradle/caches/ rm -rf .gradle/ rm -rf build/ */build/
- 重新执行构建时加上栈信息参数,方便排查残留问题:
./gradlew assembleDebug --stacktrace
如果首次构建仍然提示目录不存在,可以手动在报错模块的build/tmp/路径下创建kotlin-classes/debug空目录,首次Kotlin编译任务执行成功后,后续构建会自动生成该目录,不需要手动维护。
补充:你配置中声明的jcenter仓库已停止服务,后续如果出现依赖拉取失败,直接将
jcenter()从仓库列表移除即可,保留google()和mavenCentral()就能覆盖绝大多数依赖。
内容的提问来源于stack exchange,提问作者Diego Perez

