android - Proguard 是否缩小了我的常量?

标签 android proguard android-lifecycle

在我最近发布的应用程序中,我添加了混淆器。一个奇怪的错误开始出现:

Fatal Exception: java.lang.NullPointerException
Attempt to invoke virtual method 'java.lang.String com.siplay.myapp.b.e.e.b()' on a null object reference

此行触发错误:

public boolean isVideo() {
    return Media.MEDIA_TYPE_VIDEO.equals(mImage.getType());
}

MEDIA_TYPE_VIDEO 是一个常量,声明如下:

public class Media implements Parcelable {
    ...
    public static final String MEDIA_TYPE_VIDEO = "video";
    ...
    @Retention(RetentionPolicy.SOURCE)
    @StringDef({Media.MEDIA_TYPE_VIDEO, Media.MEDIA_TYPE_PHOTO, Media.MEDIA_TYPE_THUMB})
    public @interface MediaTypes {}
    ...
    public void setType(@MediaTypes String type) {
        ...
}

我在许多帖子中读到 Proguard 不会混淆常量声明。但是,它必须是混淆常量或 mImage 对象。堆栈跟踪告诉我,这个 NPE 在我初始化 View 后立即触发:

public class MyFragment extends Fragment {
    ...
    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if (savedInstanceState != null) {
            mImage = savedInstanceState.getParcelable(Constants.BUNDLE_IMAGE);
            ...
        }

        mVideoLoader.setVisibility(View.GONE);

        if (isVideo()) { //HERE
            ...
        }
        ...
    }

    @Override
    public void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putParcelable(Constants.BUNDLE_IMAGE, mImage);
        ...
    }
}

也许这是因为我从 onActivityCreated 上钩了?

最佳答案

replace com.example with base package of Media Class and put this line in proguard file

-keep class com.example.** { *; }

关于android - Proguard 是否缩小了我的常量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44288187/

相关文章:

android - Bundle 的有效期是多久?

android - 覆盖库使用的 maxSdkVersion

android - FirebaseUI 找不到资源文件的字体属性

android - 启用混淆器后出现致命信号 11 (SIGSEGV)

java - 如何不混淆带有列表参数的方法

Android:在 Activity 之间向前和向后传递消息

android - 按下后退按钮时保存状态

android - 使用 android 分页库使页面无效

android - 在 ListView 中动画添加项目和项目移动

ProGuard java 和反射