Android Studio 3.1升级后出现默认接口方法兼容错误求助
嘿,这个问题我熟!我之前升级Android Studio到3.1的时候也踩过这个坑,本质是Java 8的默认接口方法特性在Android N(API 24)之前的系统里不被支持,而你用到的Architecture Components中的DefaultLifecycleObserver刚好依赖了这个特性,所以才会弹出这个报错:
Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.a(android.arch.lifecycle.h) Message{kind=ERROR, text=Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.a(android.arch.lifecycle.h), sources=[Unknown source file], tool name=Optional.of(...)}
下面给你几个靠谱的解决办法,按需选择:
方法一:直接升级最低兼容版本到API 24
这是最简单的方案,直接修改模块的build.gradle文件,把minSdkVersion改成24或更高:
android { defaultConfig { minSdkVersion 24 // 调整为24及以上版本 // 其他配置项... } }
不过这个方法的局限性很明显——如果你的App需要兼容API 24以下的设备,就不能用这个方案了。
方法二:启用Java 8兼容性支持(推荐)
这个方案可以让你继续支持低版本设备,同时解决编译错误,是大多数开发者的首选。只需要在模块的build.gradle中添加Java 8编译配置:
android { compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } // 如果你用的是Kotlin,还要加上下面这段 kotlinOptions { jvmTarget = "1.8" } }
添加后,Android的D8编译器会自动处理默认接口方法的兼容问题,把相关代码转换为低版本系统能识别的格式。
方法三:改用旧版生命周期观察者实现
如果你不想启用Java 8,可以放弃DefaultLifecycleObserver,改用旧的LifecycleObserver接口配合注解来实现生命周期回调:
public class MyLifecycleObserver implements LifecycleObserver { @OnLifecycleEvent(Lifecycle.Event.ON_RESUME) public void onAppResume() { // 处理ON_RESUME生命周期事件 } @OnLifecycleEvent(Lifecycle.Event.ON_PAUSE) public void onAppPause() { // 处理ON_PAUSE生命周期事件 } }
不过要注意,这种注解方式是旧的实现方案,Google现在更推荐使用DefaultLifecycleObserver配合Java 8的写法。
内容的提问来源于stack exchange,提问作者codelearner

