2017-08-16 47 views
0

如果minifyEnabledfalse一切工作正常。但我改变后,我的minifyEnabledtrue运行时异常情况:RuntimeException如果minifyEnabled是真的ViewModel类

java.lang.RuntimeException: Unable to start activity ComponentInfo{.ui.main.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class .ui.main.MainViewModel 

MainActivity类扩展AppCompatActivity,并实现LifecycleRegistryOwner,那么我宣布:

private val lifecycleRegistry: LifecycleRegistry by lazy { LifecycleRegistry(this) } 
    private val viewModel: MainViewModel by lazy { ViewModelProviders.of(this).get(MainViewModel::class.java) } 
    override fun getLifecycle(): LifecycleRegistry = lifecycleRegistry 
    // and other simple stuff 

我应该把东西在我的ProGuard规则文件也许?

完整的异常日志:

E/AndroidRuntime: FATAL EXCEPTION: main 
        Process: com.appchamp.wordchunks, PID: 32558 
        java.lang.RuntimeException: Unable to start activity ComponentInfo{com.appchamp.wordchunks/com.appchamp.wordchunks.ui.main.MainActivity}: java.lang.RuntimeException: Cannot create an instance of class com.appchamp.wordchunks.ui.main.MainViewModel 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3253) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349) 
         at android.app.ActivityThread.access$1100(ActivityThread.java:221) 
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794) 
         at android.os.Handler.dispatchMessage(Handler.java:102) 
         at android.os.Looper.loop(Looper.java:158) 
         at android.app.ActivityThread.main(ActivityThread.java:7224) 
         at java.lang.reflect.Method.invoke(Native Method) 
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
        Caused by: java.lang.RuntimeException: Cannot create an instance of class com.appchamp.wordchunks.ui.main.MainViewModel 
         at android.arch.lifecycle.ViewModelProviders$DefaultFactory.create(Unknown Source) 
         at android.arch.lifecycle.ViewModelProvider.get(Unknown Source) 
         at android.arch.lifecycle.ViewModelProvider.get(Unknown Source) 
         at com.appchamp.wordchunks.ui.main.l.a(Unknown Source) 
         at a.e.a(Unknown Source) 
         at com.appchamp.wordchunks.ui.main.MainActivity.c(Unknown Source) 
         at com.appchamp.wordchunks.ui.main.MainActivity.onStart(Unknown Source) 
         at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1265) 
         at android.app.Activity.performStart(Activity.java:6915) 
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3216) 
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)  
         at android.app.ActivityThread.access$1100(ActivityThread.java:221)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:158)  
         at android.app.ActivityThread.main(ActivityThread.java:7224)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
        Caused by: java.lang.reflect.InvocationTargetException 
         at java.lang.reflect.Constructor.newInstance(Native Method) 
         at android.arch.lifecycle.ViewModelProviders$DefaultFactory.create(Unknown Source)  
         at android.arch.lifecycle.ViewModelProvider.get(Unknown Source)  
         at android.arch.lifecycle.ViewModelProvider.get(Unknown Source)  
         at com.appchamp.wordchunks.ui.main.l.a(Unknown Source)  
         at a.e.a(Unknown Source)  
         at com.appchamp.wordchunks.ui.main.MainActivity.c(Unknown Source)  
         at com.appchamp.wordchunks.ui.main.MainActivity.onStart(Unknown Source)  
         at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1265)  
         at android.app.Activity.performStart(Activity.java:6915)  
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3216)  
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)  
         at android.app.ActivityThread.access$1100(ActivityThread.java:221)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:158)  
         at android.app.ActivityThread.main(ActivityThread.java:7224)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
        Caused by: java.lang.AssertionError: impossible 
         at java.lang.Enum$1.create(Enum.java:45) 
         at java.lang.Enum$1.create(Enum.java:35) 
         at libcore.util.BasicLruCache.get(BasicLruCache.java:54) 
         at java.lang.Enum.getSharedConstants(Enum.java:211) 
         at java.util.EnumMap.initialization(EnumMap.java:738) 
         at java.util.EnumMap.<init>(EnumMap.java:391) 
         at io.realm.ad.<init>(Unknown Source) 
         at io.realm.ad.a(Unknown Source) 
         at io.realm.ad.a(Unknown Source) 
         at io.realm.aa.l(Unknown Source) 
         at com.appchamp.wordchunks.ui.main.MainViewModel.<init>(Unknown Source) 
         at java.lang.reflect.Constructor.newInstance(Native Method)  
         at android.arch.lifecycle.ViewModelProviders$DefaultFactory.create(Unknown Source)  
         at android.arch.lifecycle.ViewModelProvider.get(Unknown Source)  
         at android.arch.lifecycle.ViewModelProvider.get(Unknown Source)  
         at com.appchamp.wordchunks.ui.main.l.a(Unknown Source)  
         at a.e.a(Unknown Source)  
         at com.appchamp.wordchunks.ui.main.MainActivity.c(Unknown Source)  
         at com.appchamp.wordchunks.ui.main.MainActivity.onStart(Unknown Source)  
         at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1265)  
         at android.app.Activity.performStart(Activity.java:6915)  
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3216)  
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)  
         at android.app.ActivityThread.access$1100(ActivityThread.java:221)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:158)  
         at android.app.ActivityThread.main(ActivityThread.java:7224)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  
        Caused by: java.lang.NoSuchMethodException: values [] 
         at java.lang.Class.getMethod(Class.java:630) 
         at java.lang.Class.getDeclaredMethod(Class.java:589) 
         at java.lang.Enum$1.create(Enum.java:41) 
         at java.lang.Enum$1.create(Enum.java:35)  
         at libcore.util.BasicLruCache.get(BasicLruCache.java:54)  
         at java.lang.Enum.getSharedConstants(Enum.java:211)  
         at java.util.EnumMap.initialization(EnumMap.java:738)  
         at java.util.EnumMap.<init>(EnumMap.java:391)  
         at io.realm.ad.<init>(Unknown Source)  
         at io.realm.ad.a(Unknown Source)  
         at io.realm.ad.a(Unknown Source)  
         at io.realm.aa.l(Unknown Source)  
         at com.appchamp.wordchunks.ui.main.MainViewModel.<init>(Unknown Source)  
         at java.lang.reflect.Constructor.newInstance(Native Method)  
         at android.arch.lifecycle.ViewModelProviders$DefaultFactory.create(Unknown Source)  
         at android.arch.lifecycle.ViewModelProvider.get(Unknown Source)  
         at android.arch.lifecycle.ViewModelProvider.get(Unknown Source)  
         at com.appchamp.wordchunks.ui.main.l.a(Unknown Source)  
         at a.e.a(Unknown Source)  
         at com.appchamp.wordchunks.ui.main.MainActivity.c(Unknown Source)  
         at com.appchamp.wordchunks.ui.main.MainActivity.onStart(Unknown Source)  
         at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1265)  
         at android.app.Activity.performStart(Activity.java:6915)  
         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3216)  
         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3349)  
         at android.app.ActivityThread.access$1100(ActivityThread.java:221)  
         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1794)  
         at android.os.Handler.dispatchMessage(Handler.java:102)  
         at android.os.Looper.loop(Looper.java:158)  
         at android.app.ActivityThread.main(ActivityThread.java:7224)  
         at java.lang.reflect.Method.invoke(Native Method)  
         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)  
         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)  end 
+0

您需要配置'proguard-rules'来保留类成员。看看以下https://gist.github.com/Jackgris/c4a71328b1ae346cba04#file-proguard-rules –

回答

-1

为了使代码使用ProGuard萎缩,加上minifyEnabled真到了合适的构建类型你的build.gradle文件。

的build.gradle文件中的以下片段启用代码发布版本萎缩:

android { 
    buildTypes { 
     release { 
      minifyEnabled true 
      proguardFiles getDefaultProguardFile('proguard-android.txt'), 
        'proguard-rules.pro' 
     } 
    } 
    ... 
} 
+0

这就是我的代码。任何其他想法? – JuliaKo

-1

当您minifyEnabled为true,proguard的缩小,混淆你的模型类和活动无法识别它,在你的亲guard-rules.pro请在下面添加行

-keep class com.appchamp.wordchunks.ui.main.MainViewModel; 
+0

这不是解决方案 – JuliaKo

+0

@JuliaKo你可以尝试编辑ViewModelProviders.of(this)到ViewModelProviders.of(this,viewModelFactory) –

相关问题