2016-09-11 7 views
1

プロジェクト: https://github.com/dakshj/TMDb_Samplejava.util.DateヌルProGuardのと

私はDevelopment_Debugビルドフレーバーでアプリを実行すると、モデル Movie.java がnull以外のDateオブジェクトを返しますので、その処理は、使用してDataBinding here は問題ありません。 TextViewには、フォーマットされた日付文字列が入力されます。しかし

、私は次のスタックトレースとNullPointerExceptionminifyEnabled trueDevelopment_Releaseビルドフレーバーで、まったく同じコードを持つアプリ、 アプリのクラッシュを実行します。

さらに
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) 

、ないこのクラッシュをルールを proguard-rules.proに追加すると、が発生しません。

私はこのクラッシュを解決するのを手伝ってください(私はProGuardルールに-dontobfuscateを追加したくありません)。

どのProGuardルールを追加しますか?おそらくGsonとjava.util.Dateにとっては何か?

答えて

0

作業Movie.java停止で明らかにこれ糖衣構文:

@BindingAdapter({"releaseDate"}) 

あなたのいずれかのコードを書き換えたり、このクラスのためにProGuardの中で例外を作成する必要があります。

+0

しかし、 '@BindingAdapter'の他の使用法は、' ProGuard'を有効にすると完全にうまく動作します。 [こちら](https://github.com/dakshj/TMDb_Sample/blob/master/app/src/main/java/com/daksh/tmdbsample/data/model/Movie.java#L100)と[ここをクリック](https://github.com/dakshj/TMDb_Sample/blob/master/app/src/main/java/com/daksh/tmdbsample/data/model/Movie.java#L109)。 – Daksh

0

難読化されるフィールド(releaseDate)にバインディング・アダプターを使用しています。これは機能しないので、このフィールドを難読化しないでください。私の提案は、以下を追加することです:

-keep class com.daksh.tmdbsample.data.model.Movie { 
    private final java.util.Date releaseDate; 
} 

あなたは非難読化されたフィールド名を維持するために必要なより多くのケースを持っている場合、私はそのようなルールにこのようなフィールドを維持するために注釈を使用することをお勧め(仮定します

+0

'@ SerializedName'は、JSON文字列のキーと名前が異なるフィールドに対してのみ使用します。 だから私はあなたの最初の提案ごとに各フィールドをチェックし、ルールを追加する必要がありますね。 – Daksh

+0

\ @SerializedNameの使用は単なる提案に過ぎませんでした。それを使用したくない場合は、Androidサポートアノテーションライブラリの\ @ Keepアノテーションもご覧ください:http://tools.android.com/tech-docs/support-annotations –