为什么AndroidFragment导致无法实例化片段错误?



我有一个设置活动,其中有一个片段,其类被实现为静态内部类。

设置活动类是这样的

public class SettingsActivity extends AppCompatActivity implements
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {...
public static class HeadingsFragment extends PreferenceFragmentCompat {
@Override
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {...}
...
}
} 

类在xml中引用如下

<Preference app:fragment="myapp.SettingsActivity$HeadingsFragment" ... />

然后我试着在模拟器中测试它,它工作得很好。但在实际设备中测试时得到了以下错误。

android .fragment.app. fragment $e:无法实例化fragment myapp。设置$HeadingsFragment:确保类名存在

尝试捕获机器人脚本并在Firebase中使用多个不同的设备进行测试,仍然得到错误。

请注意,我能够成功捕获机器人脚本只是因为它在模拟器上工作。

是什么导致了这个问题?

更新:

  1. 尝试将类作为独立的公共类(而不是静态内部类),仍然得到错误。
  2. 分析生成的APK,类在这两种情况下都出现在classes2. index中

我尝试了这里提供的解决方案

基本上是被proguard规则搞砸了。将这些行添加到proguard-rules中。文件解决问题

-keep public class * extends androidx.preference.Preference
-keep public class * extends androidx.preference.PreferenceFragmentCompat

最新更新