Metode antarmuka default hanya didukung dimulai dengan Android N

262

Saya memutakhirkan ke android studio 3.1 dan saya mendapatkan kesalahan berikut:

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

masukkan deskripsi gambar di sini

di sini adalah konfigurasi gradle saya:

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

Seperti yang Anda lihat, saya menargetkan 27 yang sudah di depan 24 yang mengeluh tentang. Apa sebenarnya yang harus saya lakukan untuk memperbaikinya? Jika saya mengubah ke 1.8 java, tidak akankah saya kehilangan banyak pelanggan? Mengapa saya tidak mendapatkan kesalahan ini sebelum saya memutakhirkan android studio?

Saya tidak tahu apakah ini tentang kelas LifecycleObserver saya baru-baru ini dimasukkan, itu di kotlin dan sekarang saya mengubahnya ke java tetapi masih mendapatkan kesalahan yang sama setelah proyek pembersihan:

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

Bagaimana cara melacak dari mana kesalahan itu berasal sehingga saya bisa memperbaikinya?

inilah dependensi versi saya:

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'
    }
j2emanue
sumber
20
"Seperti yang Anda lihat, saya menargetkan 27 yang sudah lebih awal dari 24 yang dikeluhkan?" - tidak mengeluh tentang Anda targetSdkVersion. "Apa sebenarnya yang harus saya lakukan untuk memperbaikinya?" - coba kompilasi dengan kompatibilitas Java 8 diaktifkan . "Jika saya berubah menjadi 1,8 java, apakah saya akan kehilangan banyak pelanggan?" - bukan untuk metode antarmuka standar yang dikeluhkan pesan kesalahan. "mengapa saya tidak mendapatkan kesalahan ini sebelum saya memutakhirkan studio android." - mungkin ketergantungan implisit (misalnya, pengikatan data).
CommonsWare
2
@CommonsWare persis seperti yang Anda sebutkan. mengubah ke 1.8 menyelesaikan masalah tetapi saya harus memeriksanya di perangkat yang lebih tua untuk melihat apa yang terjadi. kode yang melakukannya adalah compileOptions {sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8}
j2emanue

Jawaban:

597

Seperti yang disebutkan CommonsWare, untuk referensi tambahkan ini di dalam android {...}penutupan di build.gradle untuk modul aplikasi Anda untuk menyelesaikan masalah:

android {
...
  compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
...
}
j2emanue
sumber
13
Silakan tentukan bahwa itu harus di dalam kurung kurawal android seperti: android {// add here}
Idee
3
@ j2emanue Saya sudah menambahkan yang ini di build.gradle, tapi masih mendapatkan masalah yang sama, hanya untuk rilis build
R4j
saya harus melihat file gradle file proyek dan modul gradle. mungkin memposting pertanyaan.
j2emanue
menambahkan ini akan menunjukkan referensi yang tidak terselesaikan ke dalam struktur proyek ide tentang itu?
Urvish rana
1
Sigh Kenapa google tidak bisa begitu saja meletakkan hal-hal yang sesuai dalam pengaturan proyek default? ..
Roman Truba
65

Anda harus menggunakan Java8 untuk menyelesaikan ini, berdasarkan google Anda dapat melakukan ini dengan (klik File> Struktur Proyek ). dan ubah Kompatibilitas Sumber dan Kompatibilitas Target.

masukkan deskripsi gambar di sini

Dan Anda juga dapat mengkonfigurasinya secara langsung di file build.gradle yang sesuai:

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
  }
}
Amir
sumber
Thankuu programmer.Nice Job
Zafar Iqbal
54

Di tingkat aplikasi, Anda harus menulis kode ini:

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

Mereka berasal dari JavaVersion.java di Android.

Penghitungan versi Java.

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

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

@canerkaseler

canerkaseler
sumber
1
terima kasih atas penjelasan dan info tentang file mana yang akan diperbarui. Tingkat aplikasi atau tingkat Proyek.
Lalit Sharma
31

Perbarui build.gradle Anda (Modul: aplikasi) tambahkan compileOptionsblokir dan tambahkanJavaVersion.VERSION_1_8

apply plugin: 'com.android.application'

android {
    .................
    .........................
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
Vasudev Vyas
sumber
25

Anda dapat mengatasi masalah ini dengan menurunkan versi Kompatibilitas Sumber dan Kompatibilitas Target Versi Java ke 1.8 di Android Studio Versi 3.4.1 Terbaru

  1. Buka Pengaturan Modul (Struktur Proyek) Winodw dengan mengklik kanan pada folder aplikasi atau Command + Panah Bawah pada Mac masukkan deskripsi gambar di sini

  2. Pergi ke Modul -> Properti masukkan deskripsi gambar di sini

  3. Ubah Kompatibilitas Sumber dan Versi Kompatibilitas Target ke 1.8 masukkan deskripsi gambar di sini

  4. Klik Apply atau OK. Itu akan menyelesaikan masalah Anda.

Anda juga dapat menambahkan secara manual di build.gradle (Modul: aplikasi)

android {
...

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

...
}
Rajesh Dalsaniya
sumber
1
Itu baru saja menyelesaikan masalah saya. Tapi tolong beri tahu saya bagaimana Anda tahu ini solusinya?
mehrdad seyrafi
5

Gunakan kode ini di build.gradle Anda

android {
    compileOptions {
        incremental true
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}
Mahabub Karim
sumber
2

Proyek saya menggunakan ButterKnife dan Retro lambda, menetapkan JavaVersion.VERSION_1_8 tidak akan berfungsi. Selalu menyalahkan fungsi antarmuka statis ButterKnife sampai saya menemukan ini bermigrasi dari Retrolambda

TL; DR

Cukup tambahkan JavaVersion.VERSION_1_8 dan sepenuhnya HAPUS retrolambda dari proyek Anda. Ini akan berhasil dibangun.

Leegor
sumber
0

Ini juga terjadi pada saya tetapi menggunakan Fitur Dinamis. Saya sudah mengaktifkan kompatibilitas Java 8 di modul aplikasi tetapi saya harus menambahkan garis kompatibilitas ini ke modul Fitur Dinamis dan kemudian berfungsi.

Joaquin Iurchuk
sumber
0

Mengatur minSdkVersion ke 21 dari 19 memecahkan masalah bagi saya.

defaultConfig {
        applicationId "com.example"
        minSdkVersion 21
        targetSdkVersion 29
        versionCode 23
        versionName "1.0"
        vectorDrawables.useSupportLibrary = true
    }
ricky roy
sumber