web-dev-qa-db-ja.com

RuntimeException:ClassNotFoundException Android.Arch.lifecycle.ProcessLifecycleOwnerInitializer

このエラーはAndroid SDK <5.0でのみ発生します。したがって、4.0、4.2、4.3 ect。 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() {}

}

グラドル

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:FATAL EXCEPTION:main Java.lang.RuntimeException:Unable to get provider Android.Arch.lifecycle.ProcessLifecycleOwnerInitializer:Java.lang.ClassNotFoundException:Android.Arch.lifecycle.ProcessLifecycleOwnerInitializer at Android.app.ActivityThread.installProvider(ActivityThread。 Java:4563)Android.app.ActivityThread.installContentProviders(ActivityThread.Java:4190)at Android.app.ActivityThread.handleBindApplication(ActivityThread.Java:4132)at Android.app.ActivityThread.access $ 1300(ActivityThread.Java:130) Android.app.ActivityThread $ H.handleMessage(ActivityThread.Java:1255)at Android.os.Handler.dispatchMessage(Handler.Java:99)at Android.os.Looper.loop(Looper.Java:137)at Android。 app.ActivityThread.main(ActivityThread.Java:4745)at Java.lang.reflect.Method.invokeNative(Native Method)at Java.lang.reflect.Method.invoke(Method.Java:511)at com.Android.internal。 os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.Java:786)at com.Android.internal.os.ZygoteInit.main( ZygoteInit.Java:553)dalvik.system.NativeStart.main(Native Method)原因:Java.lang.ClassNotFoundException:Android.Arch.lifecycle.ProcessLifecycleOwnerInitializer at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.Java:61)at Java.lang.ClassLoader.loadClass(ClassLoader.Java:501)at Java.lang.ClassLoader.loadClass(ClassLoader.Java:461)at Android.app.ActivityThread.installProvider(ActivityThread.Java:4548)at 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 Android.os.Looper.loop(Looper.Java:137)Android.app.ActivityThread.main(ActivityThread.Java: 4745)Java.lang.reflect.Method.invokeNative(Native Method)Java.lang.reflect.Method.invoke(Method .Java:511)com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.Java:786)at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:553)dalvik.system。 NativeStart.main(ネイティブメソッド)

11
mikemike396

これは最終的にマルチデックスの問題になりました。私はここでドキュメントをフォローしました-> 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);
}
21
mikemike396

私がしなければならなかったのは、私のproguard-rules.proファイル:

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

ProGuardファイルに次を追加します。 Android Architecture Components 1.0.0( source )であるため、これは必要ではありませんが、明らかにそうです。

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

私の場合、何らかの方法でAndroidアーキテクチャライフサイクルファイルがAndroid Pie(Android9)のバンドルで省略されています。 proguard-rules.pro

AndroidXの場合:

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

サポートのための :

-keep class Android.Arch.lifecycle.** {*;}
0
VishnuPrajapati