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

默认的接口方法只支持从Android N(——min-api 24)开始:void Android .arch.lifecycle. defaultlifecycleobserver . oncreate (Android .arch. lifecycleowner) 消息{kind=ERROR, text=默认接口方法只支持从Android N开始(——min-api 24): void Android .arch. lifeccycle . defaultlifecycle观察者. oncreate (Android .arch. lifeccycle . lifecycleowner), sources=[未知源文件],工具名=Optional.of(D8)}

这是我的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'
    }

当前回答

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

博士TL;

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

其他回答

在应用级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

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

博士TL;

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

您应该使用Java 8来解决这个问题。根据Android文档,您可以通过单击菜单文件→项目结构来完成此操作。

并更改源兼容性和目标兼容性。

你也可以在应用级构建中直接配置它。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
  }
}

在构建中使用此代码。gradle文件:

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

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

defaultConfig {
    applicationId "com.example"
    minSdkVersion 21
    targetSdkVersion 29
    versionCode 23
    versionName "1.0"
    vectorDrawables.useSupportLibrary = true
}