当前位置: 首页 > 知识库问答 >
问题:

片段实例化崩溃

权兴为
2023-03-14

我的一些用户正在经历崩溃,这是Google Play开发者控制台上的崩溃报告中显示的错误:

无法启动活动组件信息{com.havens1515.autorespond/com.havens1515.autorespond.SettingsMenuNew}:android。应用程序。片段$InstantiationException:无法实例化片段com。havens1515.autorespond。NotificationOptions:确保类名存在,是公共的,并且有一个公共的空构造函数

用户说,当打开上面错误中提到的“设置菜单”(settings menu)中的任何设置菜单时,都会发生这种情况,但我的手机没有遇到崩溃SettingsMenuNew是一个首选项活动,所有子菜单都是首选项片段

每个首选片段都有一个空构造函数,我不知道还有什么问题。我还看到其他人的问题,它需要newInstance方法,但如果我没有在片段中加入任何其他参数,我认为我真的不需要它。

下面是一些显示这些方法的代码:

public class NotificationOptions extends PreferenceFragment
{
    public NotificationOptions()
    {

    }

    public static NotificationOptions newInstance(int title, String message)
    {
        NotificationOptions f = new NotificationOptions();
        return f;
    }
    ...
}

共有1个答案

蒋啸
2023-03-14

这可能是因为proguard删除了您的片段。

为了复制,构建模糊的APK,在开发者选项中启用“不要保留活动”,打开包含崩溃片段的活动。最小化主页按钮并从最近的应用程序中恢复应用程序

要在ADT中将proGuard配置与默认配置合并,您应该在project.properties

proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt

如果您使用Gradle构建系统

buildTypes {
    debug {
        runProguard false
    }

    release {
        runProguard true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'
    }
}

proguard-project.txt至少应该包含这些规则

-keep public class * extends android.preference.PreferenceFragment

如果你使用的是支持片段

-keep public class * extends android.support.v4.app.Fragment
-keep public class * extends android.support.v4.app.FragmentActivity

不要忘记${sdk.dir}/tools/proguard/proguard-android中已经包含了一些规则。所以根据你的需要只添加缺失的内容。

 类似资料: