2013-10-09 1 views
5

Когда я запускаю свой проект из отладки, все работает нормально. Однако, когда я запускаю его с подписанным APK я генерируемой из Android Studio (с использованием ProGuard), я получаю следующие ошибки при использовании 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 F ** вверх поле CREATOR вашего класса ... Вы должны «сказать» progroud, чтобы не сделать это в вашем классе – 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

Спасибо, но такие вещи должны были задокументировать Google! – Sufian

+1

hmmm, они добавили такие вещи в настройки defualt proguard: ANDROID_SDK \ tools \ proguard \ proguard-android.txt ... так что если вы используете proguard с gradle «обычным способом», вам больше не стоит об этом беспокоиться (обычным способом Я имею в виду 'proguardFiles getDefaultProguardFile ('proguard-android.txt'), your_specific_files_go_here.pro' – Selvin