Ошибка Android Studio: методы интерфейса по умолчанию поддерживаются только начиная с Android N (--min-api 24)
Я обновился до 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, я не пропущу много клиентов? почему я не получил эту ошибку, прежде чем я обновил 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'
}
1 ответ
Как упомянул CommonsWare, для справки добавьте это внутри android {...}
закрытие в build.gradle для вашего модуля приложения для решения проблемы:
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
...
}
Вы должны использовать Java8 для решения этой проблемы, на основе Google вы можете сделать это, нажав (Файл> Структура проекта). и измените Совместимость источника и Целевую совместимость.
И Вы также можете настроить его непосредственно в соответствующем файле 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
}
}
В gradle на уровне приложения вам нужно написать этот код:
android {
...
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Они происходят из JavaVersion.java в Android.
Перечень версий Java.
До 9: http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html
После 9: http://openjdk.java.net/jeps/223
@canerkaseler
Обновите свой build.gradle(Модуль: приложение) добавить 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
}
}
Вы можете решить эту проблему, понизив версию Java Source Compatibility и Target Compatibility до 1.8 в последней версии Android Studio 3.4.1.
Откройте настройки модуля (структура проекта) Winodw, щелкнув правой кнопкой мыши папку приложения или Command + стрелка вниз на Mac
Перейдите в Модули -> Свойства
Измените версию Source Compatibility и Target Compatibility на 1.8
Нажмите "Применить" или "ОК". Это решит вашу проблему.
Также вы можете вручную добавить в build.gradle (Модуль: приложение)
android {
...
compileOptions {
sourceCompatibility = '1.8'
targetCompatibility = '1.8'
}
...
}
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 30
buildToolsVersion "30.0.0"
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "com.example.architecture"
minSdkVersion 16
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation 'androidx.room:room-runtime:2.2.5'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
annotationProcessor 'androidx.room:room-compiler:2.2.5'
def lifecycle_version = "2.2.0"
def arch_version = "2.1.0"
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.3.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation "androidx.lifecycle:lifecycle-viewmodel-savedstate:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-service:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-process:$lifecycle_version"
implementation "androidx.cardview:cardview:1.0.0"
}
Самая важная конфигурация
- sourceCompatibility JavaVersion.VERSION_1_8*
- targetCompatibility JavaVersion.VERSION_1_8*
Используйте этот код в вашем build.gradle
android {
compileOptions {
incremental true
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}
Установка minSdkVersion на 21 из 19 решила проблему для меня.
defaultConfig {
applicationId "com.example"
minSdkVersion 21
targetSdkVersion 29
versionCode 23
versionName "1.0"
vectorDrawables.useSupportLibrary = true
}
В моем проекте используются ButterKnife и Retro lambda, установка JavaVersion.VERSION_1_8 не будет работать. Он всегда винит функцию статического интерфейса ButterKnife, пока я не нашел этот Migrate from Retrolambda
TL;DR
Просто добавьте JavaVersion.VERSION_1_8 и полностью УДАЛИТЕ retrolambda из своего проекта. Он будет успешно построен.
Это тоже случилось со мной, но с использованием динамических функций. У меня уже была включена совместимость с Java 8 в модуле приложения, но мне пришлось добавить эти строки совместимости в модуль Dynamic Feature, и тогда это сработало.