Я обновился до 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
//...
}
Как вы видите, я нацеливаюсь на 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'
}
targetSdkVersion
. "Что именно я должен сделать, чтобы это исправить?" попробуйте скомпилировать с включенной совместимостью Java 8 . «Если я перейду на 1.8, я не буду скучать по множеству клиентов?» - не для методов интерфейса по умолчанию, на которые жалуется сообщение об ошибке. «Почему я не получил эту ошибку до того, как обновил Android Studio?» - возможно, подразумеваемая зависимость (например, привязка данных).Ответы:
Как упомянул CommonsWare, для справки добавьте это в
android {...}
замыкание в build.gradle для вашего модуля приложения для решения проблемы:источник
Вы должны использовать Java8 для решения этой проблемы, на основе Google вы можете сделать это, нажав ( Файл> Структура проекта ). и измените Совместимость источника и Целевую совместимость.
И Вы также можете настроить его непосредственно в соответствующем файле build.gradle:
источник
В gradle уровня приложения вы должны написать этот код:
Они приходят из JavaVersion.java в Android.
@canerkaseler
источник
Обновите свой build.gradle (Модуль: приложение), добавьте
compileOptions
блок и добавьтеJavaVersion.VERSION_1_8
источник
Вы можете решить эту проблему, понизив версию Java Compatibility and Target Compatibility до версии 1.8 в последней версии Android Studio 3.4.1.
Откройте настройки модуля (структура проекта) Winodw, щелкнув правой кнопкой мыши папку приложения или Ctrl + Стрелка вниз на Mac
Перейти к модулям -> Свойства
Изменить версию «Совместимость источника» и «Целевая совместимость» на 1.8
Нажмите Применить или ОК. Это решит вашу проблему.
Также вы можете вручную добавить в build.gradle (Модуль: приложение)
источник
Используйте этот код в вашем build.gradle
источник
Мой проект использует ButterKnife и Retro lambda, настройка JavaVersion.VERSION_1_8 не будет работать. Это всегда обвиняет в статической функции интерфейса ButterKnife, пока я не нашел это Migrate from Retrolambda
TL; DR
Просто добавьте JavaVersion.VERSION_1_8 и полностью удалите retrolambda из вашего проекта. Он будет успешно построен.
источник
Это также случилось со мной, но с использованием динамических функций. У меня уже была включена совместимость с Java 8 в модуле приложения, но мне пришлось добавить эти строки совместимости в модуль Dynamic Feature, и тогда это сработало.
источник
Установка minSdkVersion в 21 из 19 решила проблему для меня.
источник