Android Studio中Kotlin项目调用Java接口静态方法编译报错
解决Kotlin调用Java接口静态方法编译失败的问题
我之前也碰到过一模一样的情况,在Android Studio 3.0.1里折腾Kotlin调用Java接口静态方法,改了配置清了缓存还是编译报错,后来逐一排查才找到关键问题,你可以跟着试试:
1. 确保Java 8支持配置完全覆盖
Java接口的静态方法是Java 8的特性,所以项目里的Java 8配置不能有遗漏:
- 模块级build.gradle(app模块):
必须同时配置compileOptions和kotlinOptions,两者缺一不可:android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } kotlinOptions { jvmTarget = "1.8" } } - 项目根目录build.gradle:
要使用和Android Studio 3.0.1兼容的Kotlin版本,建议选1.2.x系列(比如1.2.71),高版本Kotlin和AS 3.0.1兼容性很差:buildscript { ext.kotlin_version = '1.2.71' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } }
2. 检查代码写法是否正确
- 先确认Java接口的静态方法定义没问题:
public interface MyJavaInterface { static void myStaticMethod() { // 方法实现逻辑 } } - Kotlin里的调用方式要直接用接口名调用,别搞复杂了:
MyJavaInterface.myStaticMethod()
3. 开启Desugar支持(针对低API级别)
如果你的项目targetSdkVersion低于24,Android默认不支持部分Java 8特性,必须开启Desugar:
在app模块的build.gradle里添加:
android { defaultConfig { // 若方法数超过65536,需要开启multiDex multiDexEnabled true } compileOptions { coreLibraryDesugaringEnabled true sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } } dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.0.5' }
4. 排查混淆和缓存问题
- 如果开了混淆,要确保Java接口的静态方法被保留,在
proguard-rules.pro里加:-keep interface com.yourpackage.MyJavaInterface { public static <methods>; } - 彻底清理缓存:选
File -> Invalidate Caches / Restart...,一定要点Invalidate and Restart,只重启不清理缓存没用。
5. 检查模块依赖关系
如果这个Java接口在其他模块里,要确保依赖的模块也配置了Java 8支持,而且app模块已经正确依赖了该模块。
按这些步骤逐一排查,应该能解决编译失败的问题。
内容的提问来源于stack exchange,提问作者Raj
相关产品推荐
相关产品推荐

