2013-05-03 25 views
8

で難読化すると私のアプリは、難読化する前に正常に動作しますが、私はProGuardのを有効にしたとき、私は次のエラーを取得する:必要がありますParcelable問題ProGuardの

-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

だから、Parcelable:

2013-05-02 13:43:58.772 E 30138/AndroidRuntime: FATAL EXCEPTION: main java.lang.NumberFormatException: Invalid long: "0.20" 
    at java.lang.Long.invalidLong(Long.java:125) 
    at java.lang.Long.parse(Long.java:362) 
    at java.lang.Long.parseLong(Long.java:353) 
    at java.lang.Long.parseLong(Long.java:319) 
    at com.sourcetone.data.model.Station.long getId()(SourceFile:195) 
    at com.sourcetone.STStationListFragment.void deleteStation(com.sourcetone.data.model.Station)(SourceFile:298) 
    at com.sourcetone.STStationListFragment.void access$4(com.sourcetone.STStationListFragment,com.sourcetone.data.model.Station)(SourceFile:293) 
    at com.sourcetone.STStationListFragment$ArrayListAdapter$1.void onClick(android.view.View)(SourceFile:274) 
    at android.view.View.performClick(View.java:3528) 
    at android.view.View$PerformClick.run(View.java:14217) 
    at android.os.Handler.handleCallback(Handler.java:605) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4482) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:794) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:561) 
    at dalvik.system.NativeStart.main(Native Method) 

2013-05-02 13:43:58.803 W 472/ActivityManager: Force finishing activity com.sourcetone/.STMainActivity 

マイProGuardの設定ファイルには、以下がありますよろしいですか?それが投げている無効なロングは、実際には私の要求の別の部分ですので、間違った番号を読んでいます。私はHttpResponseクラスも維持する必要がありますか?それ以外に何ができますか?

+0

あなたの要求をどのように解析するかによって異なります。どの反射ライブラリを使用していますか? Gson、Jackson? –

答えて

2
-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

クラスのすべてのコンテンツをそのまま保持するわけではなく、クラス名とCREATORメソッドのみを保持します。

は次のように何かを追加、あまりにもあなたParcelableクラス内のフィールドを保つようにしてください:

-keepclassmembers class * implements android.os.Parcelable { 
public <fields>; 
} 
-1
-keep class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator *; 
} 

それはちょうど、クラス名とCREATORを維持します。

あなたは上記の命令を含み、そしてあなたは、デフォルトの場所にGradleの定義を生成したままにしておくと、あまりにも自分のプロジェクトに適用されます

-keepclassmembers class * implements android.os.Parcelable { 
    public static final android.os.Parcelable$Creator CREATOR; 
} 

デフォルトアンドロイドルールにそれを変更する必要があります。

proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'