2014-01-04 3 views
1

Я хотел ProGuard запутать труднее Parcelable классы, так что я изменил мой файл по адресу:Изменить ProGuard-android.txt для Parcelables

$ {sdk.dir}/инструменты/Proguard/ProGuard-андроида. TXT

-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 *; 
} 

и, кажется, работает без проблем или сбоев после модификации, но, это правильно? Если да, почему это не стандартная конфигурация?

Thanks

ответ

3

Ваша улучшенная конфигурация в порядке. Статический CREATOR поле может быть объявлен как расширение android.os.Parcelable$Creator, поэтому следующее является немного более надежным:

-keepclassmembers class * implements android.os.Parcelable { 
    static ** CREATOR; 
} 
+0

Не могли бы вы подробнее рассказать о «продлении android.os.Parcelable $ Создателю» я имел проблемы с ProGuard android sdk ($ {sdk.dir} /tools/proguard/proguard-android.txt ) и пришлось отступить на ваше решение, но я хотел бы лучше понять причину этого. Спасибо – forcewill

+0

@forcewill Исходная конфигурация хранит все публичные статические поля с точным типом 'Parcelable $ Creator' (а не расширениями, что может быть проблемой). Улучшенная конфигурация сохраняет все статические поля с именем 'CREATOR' (независимо от их точных типов). Это должно охватывать все случаи. –

+0

спасибо за объяснение, поэтому в ProGuard нет синтаксиса для «расширения типа»?. Странно, что ребята в Google делают эту «ошибку» использования «Parcelable $ Creator» вместо 'static ** CREATOR;' – forcewill

Смежные вопросы