web-dev-qa-db-ja.com

デフォルトのインターフェースメソッドは、Android N以降でのみサポートされています。

私はアンドロイドスタジオ3.1にアップグレードして、次のエラーを得ていますim:

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

CommonsWareが言及したように、参照のためにあなたのアプリモジュールが問題を解決するためにbuild.gradleのAndroid {...}クロージャーの中にこれを加えてください:

Android {
...
  compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
...
}
283
j2emanue

これを解決するには、 google に基づいてJava8を使用する必要があります。(ファイル>プロジェクト構造をクリックして)これを実行できます。ソース互換性とターゲット互換性を変更します。

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

アプリレベルの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/22

しゅう

10
Caner

この問題は、ソースの互換性とターゲットの互換性Javaバージョンを最新のAndroid St​​udioバージョン3.4.1の1.8にダウングレードすることで解決できます。

  1. MacでアプリフォルダーまたはCommand +下矢印を右クリックして、モジュール設定(プロジェクト構造)Winodwを開きます enter image description here

  2. モジュールに移動->プロパティ enter image description here

  3. ソース互換性およびターゲット互換性バージョンを1.8に変更します enter image description here

  4. [適用]または[OK]をクリックします。それはあなたの問題を解決します。

Build.gradleに手動で追加することもできます(モジュール:アプリ)

Android {
...

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

...
}
9

Build.gradleを更新して(Module: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
    }
}
8
Vasudev Vyas

Build.gradleでこのコードを使用します

Android {
    compileOptions {
        incremental true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
5
Mahabub Karim

これは私にも起こりましたが、動的機能を使用していました。アプリモジュールで既にJava 8の互換性を有効にしていましたが、この互換性の行をDynamic Featureモジュールに追加する必要があり、それが機能しました。

0
Joaquin Iurchuk