仅从Android N开始支持默认接口方法

问题描述 投票:127回答:5

我升级到Android工作室3.1,我得到以下错误:

    Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner)
Message{kind=ERROR, text=Default interface methods are only supported starting with Android N (--min-api 24): void android.arch.lifecycle.DefaultLifecycleObserver.onCreate(android.arch.lifecycle.LifecycleOwner), sources=[Unknown source file], tool name=Optional.of(D8)}

enter image description here

这是我的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'
    }
android java-8 kotlin
5个回答
344
投票

正如CommonsWare所提到的那样,为了参考,在build.gradle中的android {...}闭包内添加这个,以便你的app模块解决问题:

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

35
投票

您应该使用Java8来解决这个问题,基于google,您可以通过(单击文件>项目结构)来执行此操作。并更改源兼容性和目标兼容性。

enter image description here

您也可以直接在相应的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
  }
}

14
投票

更新build.gradle(模块:app)添加compileOptions块并添加JavaVersion.VERSION_1_8

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "ApplicationId"
        minSdkVersion 19
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

7
投票

您可以通过在最新的Android Studio版本3.4.1中将源兼容性和目标兼容性Java版本降级到1.8来解决此问题

  1. 右键单击Mac qazxsw poi上的app文件夹或Command +向下箭头,打开模块设置(项目结构)窗口
  2. 转到模块 - >属性enter image description here
  3. 将源兼容性和目标兼容性版本更改为1.8 enter image description here
  4. 单击“应用”或“确定”。它将解决您的问题。

您也可以手动添加build.gradle(模块:app)

enter image description here

4
投票

在build.gradle中使用此代码

android {
...

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

...
}

0
投票

在app-level gradle中,你必须编写以下代码:

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

它们来自Android中的JavaVersion.java。

Java版本的枚举。

9之前:android { ... compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } }

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

他们@canerkas

© www.soinside.com 2019 - 2024. All rights reserved.