我的应用程序在混淆之前工作正常,但是当我启用proguard时,我收到以下错误:
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配置包含以下内容:
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
那么Parcelable应该保持正确吗?它投掷的无效长度实际上是我请求的另一部分,所以它正在读取错误的数字。我是否还必须保留我的HttpResponse课程?还有什么呢?
答案 0 :(得分:3)
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
不保留您班级的所有内容,只保留班级名称和CREATOR方法。
尝试在Parcelable类中保留字段,添加如下内容:
-keepclassmembers class * implements android.os.Parcelable {
public <fields>;
}
答案 1 :(得分:-1)
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
它只保留班级名称和创作者。
您应该将其更改为
-keepclassmembers class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator CREATOR;
}
默认的android规则包含上述指令,如果保留默认生成的gradle定义,它也将应用于您的项目:
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'