web-dev-qa-db-fra.com

RuntimeException: ClassNotFoundException Android.Arch.lifecycle.ProcessLifecycleOwnerInitializer

Je reçois cette erreur uniquement sur le SDK Android <5.0. Donc 4.0, 4.2, 4.3 etc. Tout ce qui tourne sous Android 5.0+ fonctionne parfaitement. Des idées? Crashes au lancement. 

Suivez ce guide pour la configuration -> https://developer.Android.com/topic/libraries/architecture/adding-components.html

App.Java

public void onCreate() {
    super.onCreate();

    ProcessLifecycleOwner.get().getLifecycle().addObserver(new AppLifecycleListener(this));
    registerActivityLifecycleCallbacks(this);
}

AppLifecycleListener.Java

public class AppLifecycleListener implements LifecycleObserver {
private App app;

public AppLifecycleListener(App app)
{
    this.app = app;
}

@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void onMoveToForeground() {
    if (app.getCurrentActivity() instanceof BaseActivity)
    {
        BaseActivity baseActivity = (BaseActivity) app.getCurrentActivity();
        baseActivity.runIsAPIVersionCheck();
        baseActivity.fetchObjectsWithHUD(false);
    }
}

@OnLifecycleEvent(Lifecycle.Event.ON_STOP)
public void onMoveToBackground() {}

}

Gradle

compileSdkVersion 26

dexOptions {
    javaMaxHeapSize "4g"
}

defaultConfig {
    applicationId "app"
    minSdkVersion 16
    targetSdkVersion 26
    versionCode 71
    versionName "4.9.9"
    multiDexEnabled true
    resConfigs "en"

    javaCompileOptions {
        annotationProcessorOptions {
            includeCompileClasspath false
        }
    }

compile 'com.Android.support:appcompat-v7:26.1.0'
compile 'com.Android.support:support-v4:26.1.0'
compile 'com.Android.support:design:26.1.0'
compile 'Android.Arch.lifecycle:extensions:1.1.0'
compile 'Android.Arch.lifecycle:compiler:1.1.0'

02-28 20: 54: 03.151 2558-2558 /? E/AndroidRuntime: EXCEPTION FATALE: main Java.lang.RuntimeException: impossible d'obtenir le fournisseur Android.Arch.lifecycle.ProcessLifecycleOwnerInitializer: Java.lang.ClassNotFoundException: Android.Arch.lifecycle.ProcessLifecycleOwnerInitializer sur Android.app.ActivityThread.installProvider (ActivityThread.Java:4563) sur Android.app.ActivityThread.installContentProviders (ActivityThread.Java:4190) sur Android.app.ActivityThread.handleBindApplication (ActivityThread.Java:4132) sur Android.app.ActivityThread.access $ 1300 (ActivityThread.Java:130) sur Android.app.ActivityThread $ H.handleMessage (ActivityThread.Java:1255) sur Android.os.Handler.dispatchMessage (Handler.Java:99) sur Android.os.Looper.loop (Looper.Java:137) sur Android.app.ActivityThread.main (ActivityThread.Java:4745) à Java.lang.reflect.Method.invokeNative (Méthode native) à Java.lang.reflect.Method.invoke (Method.Java:511) sur com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.Java:786) sur com.Android.internal.os.ZygoteInit.main (ZygoteInit.Java:553) sur dalvik.system.NativeStart.main (Native Method) Causée par: Java.lang.ClassNotFoundException: Android.Arch.lifecycle.ProcessLifecycleOwnerInitializer at dalvik.system.BaseDexClassLoader.findClass (BaseDexClassLoader.Java:61) sur Java.lang.ClassLoader.loadClass (ClassLoader.Java:501) sur Java.lang.ClassLoader.loadClass (ClassLoader.Java:461) sur Android.app.ActivityThread.installProvider (ActivityThread.Java:4548) sur Android.app.ActivityThread.installContentProviders (ActivityThread.Java:4190) sur Android.app.ActivityThread.handleBindApplication (ActivityThread.Java:4132) sur Android.app.ActivityThread.access $ 1300 (ActivityThread.Java:130) sur Android.app.ActivityThread $ H.handleMessage (ActivityThread.Java:1255) sur Android.os.Handler.dispatchMessage (Handler.Java:99) sur Android.os.Looper.loop (Looper.Java:137) sur Android.app.ActivityThread.main (ActivityThread.Java:4745) à Java.lang.reflect.Method.invokeNative (Méthode native) à Java.lang.reflect.Method.invoke (Method.Java:511) sur com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.Java:786) sur com.Android.internal.os.ZygoteInit.main (ZygoteInit.Java:553) at dalvik.system.NativeStart.main (Native Method)

9
mikemike396

Cela a fini par être une question multdex. J'ai suivi la documentation ici -> https://developer.Android.com/studio/build/multidex.html#mdex-gradle et cela fonctionne très bien maintenant! 

Gradle:

implementation 'com.Android.support:multidex:1.0.3'

App.Java:

public class App extends Application implements Application.ActivityLifecycleCallbacks {

@Override
protected void attachBaseContext(Context base) {
    super.attachBaseContext(base);
    MultiDex.install(this);
}
17
mikemike396

Tout ce que je devais faire était d’ajouter ce qui suit dans mon fichier proguard-rules.pro:

-keep class Android.Arch.lifecycle.** {*;}
2
Paul LeBeau

Ajoutez les éléments suivants à votre fichier ProGuard. Cela ne devrait pas être nécessaire depuis Android Architecture Components 1.0.0 ( source ), mais apparemment, cela l’est toujours.

-keep class * implements Android.Arch.lifecycle.GeneratedAdapter {<init>(...);}
1
Cristan