2013-10-09 56 views
5

当我从调试运行我的项目时,一切正常。然而,当我与我在Android工作室(使用ProGuard)产生的签署APK运行它,我开始使用下面的错误时getParcelable:Android BadParcelableException仅限于已签名的apk

java.lang.RuntimeException: Unable to start activity ComponentInfo{mypackage.android/mypackage.mobile.android.activities.searchActivity}: android.os.BadParcelableException: Parcelable protocol requires a Parcelable.Creator object called CREATOR on class mypackage.android.a.d.a 

为什么会出现这种异常与我签署的apk只发生?在我的proguard配置文件中,我不得不使用dontwarn android.support.v4.**来避免proguard错误。那会回来咬我吗?

+1

proguard的他妈的了CREATOR领域类的......你必须“告知”不要在你的课堂上写下这个档案 – Selvin

+0

我该怎么做? –

+1

'-keep class *实现android.os.Parcelable public static final android.os.Parcelable $ Creator *; }' – Selvin

回答

12

您需要保护CREATOR领域从proguard相关的混淆

添加此行到你的ProGuard配置:

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

谢谢。我将其添加到我的proguard-project.txt文件中,现在它可以工作。 –

+0

谢谢,但这样的事情应该由谷歌记录! – Sufian

+1

嗯,他们在defualt proguard设置中添加了这样的东西:ANDROID_SDK \ tools \ proguard \ proguard-android.txt ...因此,如果您以正常方式使用带有gradle的proguard,则不应再担心这一点我的意思是'proguardFiles getDefaultProguardFile('proguard-android.txt'),your_specific_files_go_here.pro' – Selvin