Uaktualniłem do Androida Studio 3.1 i pojawia się następujący błąd:
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)}
oto moja konfiguracja stopni:
compileSdkVersion 27
//buildToolsVersion '27.0.3'
defaultConfig {
minSdkVersion 16
targetSdkVersion 27
multiDexEnabled true
//...
}
Jak widać, celuję w 27, które są już przed 24, na które narzeka. Co dokładnie powinienem zrobić, aby to naprawić? Jeśli przejdę na wersję java 1.8, czy nie stracę wielu klientów? Dlaczego nie otrzymałem tego błędu przed uaktualnieniem studia Android?
Nie wiem, czy chodzi o klasę LifecycleObserver, którą ostatnio wprowadziłem, była w kotlin, a teraz zmieniłem ją na java, ale po czyszczeniu projektu nadal pojawia się ten sam błąd:
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);
}
}
Jak ustalić, skąd pochodzi błąd, aby go naprawić?
oto moje zależności wersji:
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'
}
targetSdkVersion
. „Co dokładnie powinienem zrobić, aby to naprawić?” - spróbuj skompilować z włączoną kompatybilnością Java 8 . „jeśli przejdę na wersję 1.8 java, czy nie będę mieć wielu klientów?” - nie dotyczy domyślnych metod interfejsu, na które narzeka komunikat o błędzie. „dlaczego nie otrzymałem tego błędu przed uaktualnieniem Android Studio.” - być może ukryta zależność (np. powiązanie danych).Odpowiedzi:
Jak wspomniano CommonsWare, w celach informacyjnych dodaj to wewnątrz
android {...}
zamknięcia w build.gradle, aby moduł aplikacji rozwiązał problem:źródło
Aby rozwiązać ten problem, powinieneś użyć Java8, w oparciu o Google możesz to zrobić, klikając ( Plik> Struktura projektu ). i zmień Zgodność źródła i Zgodność docelową.
Możesz także skonfigurować go bezpośrednio w odpowiednim pliku build.gradle:
źródło
W gradacji na poziomie aplikacji musisz napisać następujący kod:
Pochodzą z JavaVersion.java na Androida.
@canerkaseler
źródło
Zaktualizuj swój build.gradle (moduł: aplikacja) dodaj
compileOptions
blok i dodajJavaVersion.VERSION_1_8
źródło
Możesz rozwiązać ten problem, obniżając zgodność źródła i docelową zgodność Java w wersji Java do 1.8 w najnowszej wersji Android Studio 3.4.1
Otwórz Ustawienia modułu (Struktura projektu) Winodw, klikając prawym przyciskiem myszy folder aplikacji lub Command + Strzałka w dół na komputerze Mac
Przejdź do Moduły -> Właściwości
Zmień wersję kompatybilności źródła i docelowej wersji na 1.8
Kliknij Zastosuj lub OK To jest to. To rozwiąże twój problem.
Możesz także ręcznie dodać w build.gradle (moduł: aplikacja)
źródło
Użyj tego kodu w swoim build.gradle
źródło
Mój projekt używa ButterKnife i Retro lambda, ustawienie JavaVersion.VERSION_1_8 nie będzie działać. Zawsze obwinia za statyczną funkcję interfejsu ButterKnife, dopóki tego nie znalazłem Migracji z Retrolambdy
TL; DR
Po prostu dodaj JavaVersion.VERSION_1_8 i całkowicie USUŃ retrolambda z twojego projektu. Zbuduje się pomyślnie.
źródło
Zdarzyło mi się to również przy użyciu funkcji dynamicznych. Miałem już włączoną kompatybilność z Java 8 w module aplikacji, ale musiałem dodać te linie zgodności do modułu Dynamic Feature, a potem zadziałało.
źródło
Ustawienie minSdkVersion na 21 z 19 rozwiązało problem.
źródło