默认的接口方法只支持Android 7.0 (Nougat)

我升级到Android Studio 3.1,我得到以下错误:

默认接口方法只支持从Android N(——min-api 24)开始:void Android .arch. lifeccycle . defaultlifecycleobserver . oncreate (Android .arch. lifeccycle . lifecycleowner)

Message{kind=ERROR, text=默认的接口方法只支持从Android N(——min-api 24)开始:void Android .arch. lifeccycle . defaultlifecycleobserver . oncreate (Android .arch. lifeccycle . lifecycleowner), sources=[未知源文件],tool name=Optional.of(D8)}

Error

这是我的Gradle配置:

compileSdkVersion 27
//buildToolsVersion '27.0.3'
defaultConfig {
minSdkVersion 16
targetSdkVersion 27
multiDexEnabled true
//...
}

如你所见,我的目标是27,它已经超过了它所抱怨的24。我该怎么补救呢?如果我换成1.8 Java,我是不是会失去很多客户?为什么我在升级Android Studio之前没有得到这个错误?

我不知道这是否与我最近放入的LifecycleObserver类有关。它是在Kotlin,现在我把它改成了Java,但我在清理项目后仍然得到相同的错误:

public class LifeCycleAwareObserver implements LifecycleObserver {


@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void  onAppBackgrounded() {
AnalyticsUtils.trackStartSession(true);
}


@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onAppForegrounded() {
AnalyticsUtils.trackStartSession(false);
}
}

我如何跟踪错误来自哪里,以便修复它?

以下是我的版本依赖项:

project.ext {


firebase_version = '12.0.0'


supportlib_version = '27.0.2'


room_version = '1.0.0'


espresso_version = '3.0.1'


archLifecycleVersion = '1.1.1'
}
143026 次浏览

作为CommonsWare提到,作为参考,将此添加到构建中的android {...}闭包中。Gradle为您的应用程序模块(应用程序级别)解决问题:

android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
...
}

您应该使用Java 8来解决这个问题。基于Android文档,你可以通过点击菜单文件项目结构来完成。

并改变源的兼容性目标的兼容性

Enter image description here

你也可以直接在app级的build.gradle文件中配置它:

android {
...
// Configure only for each module that uses Java 8
// language features (either in its source code or
// through dependencies).
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

更新build.gradle(Module:app),添加compileOptions块和JavaVersion.VERSION_1_8

apply plugin: 'com.android.application'


android {
.................
.........................
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

在你的build.gradle文件中使用以下代码:

android {
compileOptions {
incremental true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

你可以通过在最新的Android Studio 3.4.1版本中将源的兼容性和*Target Compatibility Java版本降级到1.8来解决这个问题。

  1. 通过右键单击app文件夹或Mac上的命令 + 向下的箭头打开模块设置(项目结构)窗口

    Enter image description here

  2. 进入模块属性

    Enter image description here

  3. 修改源的兼容性目标的兼容性版本为1.8

    Enter image description here

  4. 单击应用好吧。就是这样。它会解决你的问题。

你也可以手动在文件build.gradle(模块:app)中添加:

android {
...


compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}


...
}

在应用级Gradle文件中,你必须编写以下代码:

android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

它们来自Android中的JavaVersion.java

Java版本的枚举。

9之前:http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html

9之后:http://openjdk.java.net/jeps/223

这种情况也发生在我身上,但使用的是动态特性。我已经在应用程序模块中启用了Java 8兼容性,但我必须将此兼容性行添加到动态特性模块中,然后它才能工作。

我的项目使用ButterKnife和Retro lambda。设置JavaVersion。VERSION_1_8将不能工作。它总是责怪ButterKnife静态接口函数,直到我发现这个从Retrolambda迁移

博士TL;

只需添加javaverse。VERSION_1_8和完全删除 retrolambda从你的项目。它将成功构建。

将minSdkVersion从19改为21为我解决了这个问题。

defaultConfig {
applicationId "com.example"
minSdkVersion 21
targetSdkVersion 29
versionCode 23
versionName "1.0"
vectorDrawables.useSupportLibrary = true
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'


android {
compileSdkVersion 30
buildToolsVersion "30.0.0"


compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}


defaultConfig {
applicationId "com.example.architecture"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"


testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}


buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}


dependencies {
implementation 'androidx.room:room-runtime:2.2.5'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
annotationProcessor 'androidx.room:room-compiler:2.2.5'
def lifecycle_version = "2.2.0"
def arch_version = "2.1.0"


implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"
implementation "androidx.cardview:cardview:1.0.0"
}

在你的应用程序模块的build.gradle中添加配置

android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}