2013-10-02 14 views
9

W moim progu, mam następujące rzeczy, aby utrzymać publiczne obstrukcje z zaciemniania.android - jak zachować wyłudzanie od proguard

-keepclassmembers enum * { 
    public static **[] values(); 
    public static ** valueOf(java.lang.String); 
} 

Moje pytanie brzmi, czy to również utrzymać public enum Waluta w klasie jak to?

public class Foo { 
    public enum **Currency** {PENNY, NICKLE, DIME, QUARTER}; 

    ... 
} 

Jeśli nie, co muszę dodać osobno?

Dodanie poniższych nie wydaje się pomóc.

-keepattributes InnerClasses 

Jakaś radę? Dzięki

Odpowiedz

3

można spróbować powiedzieć ProGuard zachować specyficzną klasę:

-keep class com.xxx.Foo { *; } 
3

Opcja -keepclassmembers utrzymuje tylko członków klasy; w tym przypadku metody wszystkich klas wyliczeniowych. Dzika karta * pasuje również do klas wewnętrznych.

Jeśli z jakiegoś powodu chcesz zachować wewnętrzną klasę z oryginalną nazwą, można podać:

-keep class somepackage.Foo$Currency 

które powinny być konieczne tylko jeśli aplikacja uzyskuje dostęp do klasy za pośrednictwem refleksji.

16

Można spróbować

-keep public enum com.stuff.TheEnclosingClass$** { 
    **[] $VALUES; 
    public *; 
} 

Jak pokazano na tej odpowiedzi Proguard won't keep a class member's enums

Tylko nie zapomnij umieścić

-keepattributes InnerClasses