带有ProGuard的java.util.Date null

带有ProGuard的java.util.Date null,java,android,gson,proguard,java.util.date,Java,Android,Gson,Proguard,Java.util.date,项目: 当我在Development\u DebugBuild Flavor中运行应用程序时,模型 返回一个非空的日期对象,从而使用数据绑定对其进行处理 很好。TextView中填充了格式化的日期字符串 但是,当我在Development\u ReleaseBuild Flavor中使用完全相同的代码运行应用程序时, 应用程序崩溃时出现NullPointerException,堆栈跟踪如下: FATAL EXCEPTION: main Process: com.daksh.tmdbsample

项目:

当我在
Development\u Debug
Build Flavor中运行应用程序时,模型 返回一个非空的日期对象,从而使用
数据绑定对其进行处理
很好。
TextView
中填充了格式化的日期字符串

但是,当我在
Development\u Release
Build Flavor中使用完全相同的代码运行应用程序时, 应用程序崩溃时出现
NullPointerException
,堆栈跟踪如下:

FATAL EXCEPTION: main
Process: com.daksh.tmdbsample, PID: 10470
Theme: themes:{default=overlay:com.baranovgroup.nstyle, iconPack:com.baranovgroup.nstyle, fontPkg:com.baranovgroup.nstyle, com.android.systemui=overlay:com.baranovgroup.nstyle, com.android.systemui.navbar=overlay:com.baranovgroup.nstyle}
java.lang.NullPointerException: Attempt to invoke virtual method 'long java.util.Date.getTime()' on a null object reference
    at java.util.Calendar.setTime(Calendar.java:1197)
    at java.text.SimpleDateFormat.formatImpl(SimpleDateFormat.java:527)
    at java.text.SimpleDateFormat.format(SimpleDateFormat.java:829)
    at java.text.DateFormat.format(DateFormat.java:314)
    at com.daksh.tmdbsample.data.model.Movie.a(Unknown Source)
    at com.daksh.tmdbsample.databinding.MovieDetailBinding.b(Unknown Source)
    at android.databinding.ViewDataBinding.a(Unknown Source)
    at android.databinding.ViewDataBinding$6.run(Unknown Source)
    at android.databinding.ViewDataBinding$5.onViewAttachedToWindow(Unknown Source)
    at android.view.View.dispatchAttachedToWindow(View.java:14535)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2836)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
    at android.view.ViewGroup.dispatchAttachedToWindow(ViewGroup.java:2843)
    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1372)
    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1115)
    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6023)
    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858)
    at android.view.Choreographer.doCallbacks(Choreographer.java:670)
    at android.view.Choreographer.doFrame(Choreographer.java:606)
    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5461)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
此外,当我将
-dontobfuscate
规则添加到我的

请帮助我解决此崩溃(我不想将
-dontobfuscate
添加到我的ProGuard规则中)


我应该添加哪些程序规则?可能是Gson和java.util.Date的一些东西?

显然,
Movie.java
中的语法糖停止工作了:

@BindingAdapter({"releaseDate"})

您可能需要重写代码,或者在proguard中为此类创建一个例外。

显然,
Movie.java
中的语法糖停止工作:

@BindingAdapter({"releaseDate"})

您需要重写代码,或者在proguard中为此类创建一个例外。

您正在使用BindingAdapter处理模糊的字段(releaseDate)。这将不起作用,您需要保持此字段不模糊。我的建议是增加以下内容:

-keep class com.daksh.tmdbsample.data.model.Movie {
    private final java.util.Date releaseDate;
}
如果您有更多需要保持字段名称不模糊的情况,我建议使用注释来保持此类字段的规则如下(假设您对其使用@SerializedName注释):

-keepclassmembers类*{
@com.google.gson.annotations.SerializedName;
}

您正在使用BindingAdapter处理模糊的字段(releaseDate)。这将不起作用,您需要保持此字段不模糊。我的建议是增加以下内容:

-keep class com.daksh.tmdbsample.data.model.Movie {
    private final java.util.Date releaseDate;
}
如果您有更多需要保持字段名称不模糊的情况,我建议使用注释来保持此类字段的规则如下(假设您对其使用@SerializedName注释):

-keepclassmembers类*{
@com.google.gson.annotations.SerializedName;
}

然而,
@BindingAdapter
的其他用法在启用了
ProGuard
的情况下工作得非常好。请参阅和。但是,如果启用了
ProGuard
,则
@BindingAdapter
的其他用法可以很好地工作。请参阅和。我仅对名称与其JSON字符串中的键不同的字段使用
@SerializedName
。所以我想我必须检查每个字段并根据您的第一个建议添加规则。使用\@SerializedName只是一个建议。如果您不想使用它,还可以查看Android support annotations库中的\@Keep注释:我仅对名称与其JSON字符串中的键不同的字段使用
@SerializedName
。所以我想我必须检查每个字段并根据您的第一个建议添加规则。使用\@SerializedName只是一个建议。如果您不想使用它,还可以查看Android support annotations库中的\@Keep注释: