Varsayılan arayüz yöntemleri yalnızca Android N ile başlayarak desteklenir


262

Android studio 3.1'e yükseltme yaptım ve aşağıdaki hatayı alıyorum:

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

resim açıklamasını buraya girin

İşte benim gradle yapılandırma:

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

Gördüğünüz gibi, zaten şikayetçi olduğu 24'ün üzerinde olan 27'yi hedefliyorum. Bunu düzeltmek için tam olarak ne yapmalıyım? 1.8 java olarak değiştirirsem, çok fazla müşterimi kaçırmayacak mıyım? Android stüdyosunu yükseltmeden önce neden bu hatayı almadım?

Bunun son zamanlarda koyduğum LifecycleObserver sınıfı ile ilgili olup olmadığını bilmiyorum, kotlin'deydi ve şimdi java olarak değiştirdim, ancak projeyi temizledikten sonra hala aynı hatayı alıyorum:

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

Düzeltmek için hatanın nereden geldiğini nasıl izleyebilirim?

İşte benim sürüm bağımlılıkları:

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
"Gördüğünüz gibi ben zaten 24 şikayet onun şikayet olduğunu hedefliyoruz?" - hakkında şikayet etmiyor targetSdkVersion. "Bunu düzeltmek için tam olarak ne yapmalıyım?" - Java 8 uyumluluğu etkinken derlemeyi deneyin . "1.8 java değiştirirsem çok fazla müşteri kaçırmayacak mıyım?" - Hata mesajının şikayet ettiği varsayılan arayüz yöntemleri için değil. "Neden ben android studio yükseltmeden önce bu hatayı alamadım." - belki de örtük bir bağımlılık (örneğin, veri bağlama).
CommonsWare

2
@CommonsWare tam olarak bahsettiğiniz gibi oldu. 1.8 olarak değiştirmek sorunu çözdü ama ne olduğunu görmek için eski cihazlarda kontrol etmek zorunda kalacağım. yapan kod compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}
j2emanue

Yanıtlar:


597

CommonsWare'in belirttiği gibi, referans için bunu android {...}uygulama modülünüzün sorunu çözmesi için build.gradle içindeki kapağa ekleyin :

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

13
Lütfen Android kıvırcık ayracı içinde olması gerektiğini belirtin: android {// buraya ekle}
Idee

3
@ j2emanue Bunu build.gradle'a zaten ekledim, ancak yine de aynı sorunu alıyorum, sadece sürüm oluşturma için
R4j

gradle dosyanızı hem proje hem de modül gradle dosyalarını görmeniz gerekir. belki bir soru gönderin.
j2emanue

Bu ekleme proje yapısı üzerinde çözülmemiş referans gösterecektir bunun hakkında herhangi bir fikir?
Urvish rana

1
Sigh Google neden varsayılan proje ayarlarına uygun şeyler
koyamıyor

65

Sen dayanarak bu, çözmek için Java8 kullanmalıdır google sen (tıklama bunu yapabilirsiniz Dosya> Proje Yapısı ). Kaynak Uyumluluğunu ve Hedef Uyumluluğunu değiştirin.

resim açıklamasını buraya girin

Ayrıca, doğrudan ilgili build.gradle dosyasında da yapılandırabilirsiniz:

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

Güzel iş
Zafar Iqbal

54

Uygulama düzeyinde notta şu kodu yazmanız gerekir:

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

Android'de JavaVersion.java'dan geliyorlar .

Java sürümlerinin numaralandırılması.

9'dan önce: http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html

9'dan sonra: http://openjdk.java.net/jeps/223

@canerkaseler


1
güncellenecek dosya hakkında açıklama ve bilgi için teşekkürler. Uygulama düzeyi veya Proje düzeyi.
Lalit Sharma

31

Build.gradle (Modül: app) add block'unuzu güncelleyin compileOptionsve ekleyinJavaVersion.VERSION_1_8

apply plugin: 'com.android.application'

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

25

Son Android Studio Sürüm 3.4.1'de Kaynak Uyumluluğu ve Hedef Uyumluluğu Java Sürümü'nü 1.8'e düşürerek bu sorunu çözebilirsiniz.

  1. Uygulama klasörünü veya Mac'te Command + Aşağı Ok tuşlarını tıklayarak Modül Ayarları'nı (Proje Yapısı) Winodw açın resim açıklamasını buraya girin

  2. Modüller -> Özellikler'e gidin resim açıklamasını buraya girin

  3. Kaynak Uyumluluğu ve Hedef Uyumluluk Sürümü'nü 1.8 olarak değiştirin resim açıklamasını buraya girin

  4. Uygula ya da Tamam'ı tıklayın. Sorununuzu çözecektir.

Ayrıca build.gradle öğesini manuel olarak ekleyebilirsiniz (Modül: app)

android {
...

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

...
}

1
Sorunumu çözdü. Ama lütfen bana bunun çözümün nasıl olduğunu bildiğinizi söyleyin.
mehrdad seyrafi

5

Bu kodu build.gradle dosyasında kullanın

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

2

Projemde ButterVnife ve Retro lambda kullanıyorum, JavaVersion.VERSION_1_8 ayarı çalışmıyor. Ben bunu bulana dek hep BUTTERKNIFE statik arayüz fonksiyonu ile suçluyor Retrolambda dan Geçirme

TL; DR

JavaVersion.VERSION_1_8'i ekleyin ve retrolambda'yı projenizden tamamen KALDIRIN. Başarıyla inşa edilecek.


0

Bu da başıma geldi ama Dinamik Özellikler kullanıyordu. Uygulama modülünde zaten Java 8 uyumluluğu etkinleştirildim, ancak bu özellik satırlarını Dynamic Feature modülüne eklemek zorunda kaldım ve sonra çalıştı.


0

19'dan minSdkVersion'ı 21'e ayarlamak sorunu benim için çözdü.

defaultConfig {
        applicationId "com.example"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 23
        versionName "1.0"
        vectorDrawables.useSupportLibrary = true
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.