Подтвердить что ты не робот

RuntimeException: ClassNotFoundException android.arch.lifecycle.ProcessLifecycleOwnerInitializer

Я получаю эту ошибку только на Android SDK & lt; 5.0. Так 4.0, 4.2, 4.3 и т.д. Все, что работает под управлением Android 5. 0+ работает без нареканий. Есть идеи? Сбои при запуске.

Следуя этому руководству по установке → 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: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: главная                                                  java.lang.RuntimeException: невозможно получить поставщика android.arch.lifecycle.ProcessLifecycleOwnerInitializer: java.lang.ClassNotFoundException: android.arch.lifecycle.ProcessLifecycleOwnerInitializer                                                      на android.app.ActivityThread.installProvider(ActivityThread.java:4563)                                                      на android.app.ActivityThread.installContentProviders(ActivityThread.java:4190)                                                      на android.app.ActivityThread.handleBindApplication(ActivityThread.java:4132)                                                      на android.app.ActivityThread.access $ 1300 (ActivityThread.java:130)                                                      на android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1255)                                                      на android.os.Handler.dispatchMessage(Handler.java:99)                                                      на android.os.Looper.loop(Looper.java:137)                                                      на android.app.ActivityThread.main(ActivityThread.java:4745)                                                      в java.lang.reflect.Method.invokeNative (родной метод)                                                      в java.lang.reflect.Method.invoke(Method.java:511)                                                      на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)                                                      на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)                                                      в dalvik.system.NativeStart.main (собственный метод)                                                   Вызывается: java.lang.ClassNotFoundException: android.arch.lifecycle.ProcessLifecycleOwnerInitializer                                                      в dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)                                                      в java.lang.ClassLoader.loadClass(ClassLoader.java:501)                                                      в java.lang.ClassLoader.loadClass(ClassLoader.java:461)                                                      на android.app.ActivityThread.installProvider(ActivityThread.java:4548)                                                      на android.app.ActivityThread.installContentProviders(ActivityThread.java:4190)                                                      на android.app.ActivityThread.handleBindApplication(ActivityThread.java:4132)                                                      на android.app.ActivityThread.access $ 1300 (ActivityThread.java:130)                                                      на android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1255)                                                      на android.os.Handler.dispatchMessage(Handler.java:99)                                                      на android.os.Looper.loop(Looper.java:137)                                                      на android.app.ActivityThread.main(ActivityThread.java:4745)                                                      в java.lang.reflect.Method.invokeNative (родной метод)                                                      в java.lang.reflect.Method.invoke(Method.java:511)                                                      на com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:786)                                                      на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)                                                      в dalvik.system.NativeStart.main (собственный метод)

4b9b3361

Ответ 1

Это закончилось тем, что это проблема мультидекса. Я следовал за документами здесь → https://developer.android.com/studio/build/multidex.html#mdex-gradle, и теперь это прекрасно работает!

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);
}

Ответ 2

Все, что мне нужно было сделать, это добавить следующее в мой файл proguard-rules.pro:

-keep class android.arch.lifecycle.** {*;}

Ответ 3

Добавьте следующее в ваш файл ProGuard. Это не должно быть необходимо, так как компоненты архитектуры Android 1.0.0 (источник), но, видимо, так и есть.

-keep class * implements android.arch.lifecycle.GeneratedAdapter {<init>(...);}

Ответ 4

В моем случае файлы жизненного цикла архитектуры Android каким-то образом пропускаются в комплекте Android на Pie (Android9). Итак, то, что я сделал, было добавлено, чтобы сохранить выражение для того же в proguard-rules.pro

Для AndroidX:

-keep class androidx.lifecycle.** {*;}

Для поддержки:

-keep class android.arch.lifecycle.** {*;}