cla*_*vio 20 java android android-fragments kotlin
我在 Google Play 崩溃日志中看到崩溃,这真的让我很难过。
java.lang.RuntimeException:
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3086)
at android.app.ActivityThread.handleLaunchActivity (ActivityThread.java:3229)
at android.app.servertransaction.LaunchActivityItem.execute (LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks (TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute (TransactionExecutor.java:68)
at android.app.ActivityThread$H.handleMessage (ActivityThread.java:1926)
at android.os.Handler.dispatchMessage (Handler.java:106)
at android.os.Looper.loop (Looper.java:214)
at android.app.ActivityThread.main (ActivityThread.java:6981)
at java.lang.reflect.Method.invoke (Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run (RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1445)
Caused by: androidx.fragment.app.Fragment$InstantiationException:
at androidx.fragment.app.Fragment.instantiate (Fragment.java:462)
at androidx.fragment.app.FragmentContainer.instantiate (FragmentContainer.java:50)
at androidx.fragment.app.FragmentState.instantiate (FragmentState.java:80)
at androidx.fragment.app.FragmentManagerImpl.restoreAllState (FragmentManager.java:3109)
at androidx.fragment.app.FragmentController.restoreAllState (FragmentController.java:158)
at androidx.fragment.app.FragmentActivity.onCreate (FragmentActivity.java:344)
at androidx.appcompat.app.AppCompatActivity.onCreate (AppCompatActivity.java:85)
at com.autotask.jbarra.kotlinmvvm.MainActivity.onCreate (MainActivity.kt:102)
at android.app.Activity.performCreate (Activity.java:7326)
at android.app.Activity.performCreate (Activity.java:7317)
at android.app.Instrumentation.callActivityOnCreate (Instrumentation.java:1271)
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:3066)
Caused by: java.lang.NoSuchMethodException:
at java.lang.Class.getConstructor0 (Class.java:2328)
at java.lang.Class.getConstructor (Class.java:1725)
at androidx.fragment.app.Fragment.instantiate (Fragment.java:443)
Run Code Online (Sandbox Code Playgroud)
问题是,主要活动的第 102 行没什么特别的
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) //This is line 102
Run Code Online (Sandbox Code Playgroud)
什么可能导致这种情况?为什么 oncreate 没有抛出这样的方法?它发生在一些用户的设备上,我无法重现它。
laa*_*lto 10
活动正在从实例状态包中恢复。还原操作的一部分是重新创建其片段。
您的活动有一个片段,片段类没有框架所需的 0-arg 构造函数。
我有同样的问题。其他答案没有帮助。
对我来说,它看起来像是 Proguard。这解释了为什么它只发生在生产/发布版本中,以及为什么我在调试时无法重现它。
如果您遇到 OP 的问题,请尝试以下操作:
它会崩溃吗?然后尝试使用未混淆的调试版本。如果没有,那么它可能是 Proguard。
为了修复它,我执行了以下操作:
添加:
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Run Code Online (Sandbox Code Playgroud)
请参阅 Yaroslav Mytkalyk 的答案:Fragment Instantiation crash,它帮助我解决了这个问题,尽管它现在有点旧且过时(例如“runProguard true”已过时)。
至少现在当我执行上述步骤时它不会崩溃。
PS:正如其他答案中提到的,我这样做的同时将 0-arg 构造函数添加到我的片段中,因为这是我的第一次修复尝试。我相信 Proguard 本身就是问题所在,并且没有必要添加所述构造函数,但我现在无法测试该假设。
| 归档时间: |
|
| 查看次数: |
4711 次 |
| 最近记录: |