2017-05-31 33 views
1

在我的应用程序的最新版本中,我添加了proguard。一个奇怪的错误开始出现:是proguard缩小我的常量?

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被触发之后我初始化观点:

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上瘾?

回答

3

Media类的碱包替换com.example并把这个 线中的ProGuard文件

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

确定。我要试一下。如果它解决了问题,我会通知你。 – 4gus71n

+0

这工作? –

+0

目前为止一切正常 – 4gus71n

相关问题