Actualicé a Android Studio 3.1 y recibo el siguiente error:
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)}
aquí está mi configuración de gradle:
compileSdkVersion 27
//buildToolsVersion '27.0.3'
defaultConfig {
minSdkVersion 16
targetSdkVersion 27
multiDexEnabled true
//...
}
Como puede ver, estoy apuntando a 27, que ya está por delante de 24 de los que se queja. ¿Qué debo hacer exactamente para solucionar esto? Si cambio a 1.8 java, ¿no perderé muchos clientes? ¿Por qué no recibí este error antes de actualizar Android Studio?
No sé si se trata de la clase LifecycleObserver que instalé recientemente, estaba en kotlin y ahora la cambié a java pero sigo teniendo el mismo error después de limpiar el proyecto:
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);
}
}
¿Cómo rastrear de dónde viene el error para poder solucionarlo?
Aquí están mis dependencias de versión:
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
. "¿Qué debo hacer exactamente para arreglar esto?" - intente compilar con la compatibilidad Java 8 habilitada . "si cambio a 1.8 java, ¿no faltarán muchos clientes?" - no para los métodos de interfaz predeterminados de los que se queja el mensaje de error. "¿Por qué no recibí este error antes de actualizar Android Studio?", tal vez una dependencia implícita (por ejemplo, enlace de datos).Respuestas:
Como CommonsWare mencionó, para referencia agregue esto dentro del
android {...}
cierre en build.gradle para que el módulo de su aplicación resuelva el problema:fuente
Debe usar Java8 para resolver esto, basado en google puede hacerlo (haga clic en Archivo> Estructura del proyecto ). y cambiar la compatibilidad de origen y la compatibilidad de destino.
Y también puede configurarlo directamente en el archivo build.gradle correspondiente:
fuente
En gradle de nivel de aplicación, debe escribir este código:
Vienen de JavaVersion.java en Android.
@canerkaseler
fuente
Actualice su build.gradle (Módulo: aplicación) agregue
compileOptions
bloque y agregueJavaVersion.VERSION_1_8
fuente
Puede resolver este problema bajando la versión Java de compatibilidad de origen y compatibilidad de destino a 1.8 en la última versión de Android Studio 3.4.1
Abra la Configuración del módulo (Estructura del proyecto) Winodw haciendo clic derecho en la carpeta de la aplicación o Comando + Flecha abajo en Mac
Vaya a Módulos -> Propiedades
Cambie la versión de compatibilidad de origen y de compatibilidad de destino a 1.8
Haga clic en Aplicar o Aceptar Eso es todo. Resolverá tu problema.
También puede agregar manualmente en build.gradle (Módulo: aplicación)
fuente
Use este código en su build.gradle
fuente
Mi proyecto usa ButterKnife y Retro lambda, estableciendo JavaVersion.VERSION_1_8 no funcionará. Siempre culpa a la función de interfaz estática de ButterKnife hasta que encontré este Migrate from Retrolambda
TL; DR
Simplemente agregue JavaVersion.VERSION_1_8 y QUITE completamente la retrolambda de su proyecto. Se construirá con éxito.
fuente
Esto también me sucedió a mí pero usando las características dinámicas. Ya tenía habilitada la compatibilidad con Java 8 en el módulo de la aplicación, pero tuve que agregar estas líneas de compatibilidad al módulo Dynamic Feature y luego funcionó.
fuente
Establecer minSdkVersion en 21 de 19 resolvió el problema para mí.
fuente