기본 인터페이스 방법은 Android N부터 만 지원됩니다 구성이 있습니다. compileSdkVersion 27 //buildToolsVersion ‘27.0.3’ defaultConfig {

android studio 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)}

여기에 이미지 설명을 입력하십시오

여기 내 gradle 구성이 있습니다.

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

보시다시피, 나는 이미 불만을 제기하는 24보다 앞서 27을 타겟팅하고 있습니다. 이 문제를 해결하려면 어떻게해야합니까? 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'
    }



답변

CommonsWare가 언급했듯이 참조 android {...}를 위해 app 모듈의 build.gradle 클로저 안에 이것을 추가 하여 문제를 해결하십시오.

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


답변

Google 을 기반으로 Java8을 사용하여이를 해결해야합니다 ( 파일> 프로젝트 구조 클릭 ). 소스 호환성 및 대상 호환성을 변경하십시오.

여기에 이미지 설명을 입력하십시오

또한 해당 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
  }
}


답변

앱 수준 gradle에서 다음 코드를 작성해야합니다.

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

그들은에서 온 JavaVersion.java 안드로이드에.

Java 버전의 열거입니다.

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

9 : 후 : http://openjdk.java.net/jeps/223

아리따움


답변

build.gradle (Module : app) add compileOptions블록을 업데이트하고 추가하십시오.JavaVersion.VERSION_1_8

apply plugin: 'com.android.application'

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


답변

최신 Android Studio 버전 3.4.1에서 소스 호환성 및 대상 호환성 Java 버전을 1.8로 다운 그레이드하여이 문제를 해결할 수 있습니다.

  1. Mac에서 앱 폴더 또는 Command + 아래쪽 화살표를 마우스 오른쪽 버튼으로 클릭하여 모듈 설정 (프로젝트 구조) Winodw를 엽니 다.
    여기에 이미지 설명을 입력하십시오

  2. 모듈-> 속성으로 이동하십시오
    여기에 이미지 설명을 입력하십시오

  3. 소스 호환성 및 대상 호환성 버전을 1.8로 변경
    여기에 이미지 설명을 입력하십시오

  4. 적용 또는 확인을 클릭하십시오. 문제가 해결됩니다.

또한 build.gradle에서 수동으로 추가 할 수 있습니다 (모듈 : 앱)

android {
...

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

...
}


답변

이 코드를 build.gradle에서 사용하십시오

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


답변

내 프로젝트는 ButterKnife와 Retro lambda를 사용하며 JavaVersion.VERSION_1_8을 설정하면 작동하지 않습니다. Retrolambda에서 Migrate를 찾을 때까지 항상 ButterKnife 정적 인터페이스 함수 를 비난합니다.

TL; DR

JavaVersion.VERSION_1_8을 추가하고 프로젝트에서 retrolambda를 완전히 제거하십시오. 성공적으로 빌드됩니다.