기본 인터페이스 방법은 Android N부터 만 지원됩니다


262

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'
    }

20
"보시다시피, 이미 24보다 앞서 27을 목표로하고 있습니다. -당신에 대해 불평하지 않습니다 targetSdkVersion. "이 문제를 정확히 해결하려면 어떻게해야합니까?" -Java 8 호환성을 사용 하여 컴파일하십시오 . "1.8 Java로 변경하면 많은 고객이 누락되지 않습니까?" -오류 메시지가 불평하는 기본 인터페이스 방법이 아닙니다. "Android 스튜디오를 업그레이드하기 전에이 오류가 발생하지 않은 이유는 무엇입니까?"-암시 적 종속성 (예 : 데이터 바인딩)
CommonsWare

2
@CommonsWare 그것은 당신이 언급 한 것과 정확히 같습니다. 1.8로 변경하면 문제가 해결되었지만 이전 장치에서 문제를 확인하여 결과를 확인해야합니다. 코드는 compileOptions였습니다. {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}
j2emanue

답변:


597

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

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

13
다음과 같이 안드로이드 중괄호 안에 있어야 함을 지정하십시오. android {// 여기에 추가}
Idee

3
@ j2emanue 나는 이미 build.gradle에 이것을 추가했지만 릴리스 빌드에 대해서만 동일한 문제가 발생합니다
R4j

프로젝트 및 모듈 gradle 파일 모두에서 gradle 파일을 확인해야합니다. 질문을 게시 할 수도 있습니다.
j2emanue

이것을 추가하면 프로젝트 구조에 대한 아무런 언급이없는 아이디어가 표시됩니까?
Urvish rana

1
한숨 왜 구글은 단지 기본 프로젝트 설정에서 적절한 물건을 넣을 수 없습니다 ..?
로마 Truba

65

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
  }
}

Thankuu programmer. 멋진 직업
Zafar Iqbal

54

앱 수준 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

아리따움


1
업데이트 할 파일에 대한 설명과 정보에 감사드립니다. 앱 수준 또는 프로젝트 수준
Lalit Sharma

31

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
    }
}

25

최신 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'
    }

...
}

1
방금 내 문제를 해결했습니다. 그러나 이것이 어떻게 해결책인지 알았습니까?
mehrdad seyrafi 1

5

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

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

2

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

TL; DR

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


0

이것은 나에게도 발생했지만 동적 기능을 사용했습니다. 이미 앱 모듈에서 Java 8 호환성을 사용하도록 설정했지만이 호환성 라인을 Dynamic Feature 모듈에 추가해야 작동했습니다.


0

minSdkVersion을 19에서 21로 설정하면 문제가 해결되었습니다.

defaultConfig {
        applicationId "com.example"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 23
        versionName "1.0"
        vectorDrawables.useSupportLibrary = true
    }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.