2013-10-02 15 views
9

Trong bảo vệ của tôi, tôi có những điều sau đây để giữ bí mật công khai khỏi bị làm xáo trộn.android - cách giữ enum khỏi proguard

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

Câu hỏi của tôi là, điều này cũng giữ enum công tệ trong một lớp học như thế này?

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

    ... 
} 

Nếu không, tôi phải thêm gì riêng biệt?

Thêm nội dung sau đây có vẻ không hữu ích.

-keepattributes InnerClasses 

Bạn có lời khuyên nào? Cảm ơn

Trả lời

3

Bạn có thể cố gắng để nói với Proguard để giữ cho lớp học cụ thể:

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

Tùy chọn -keepclassmembers chỉ giữ các thành viên lớp; trong trường hợp này, các phương pháp values()valueOf(String) của tất cả các lớp enum. Thẻ hoang dã * cũng phù hợp với các lớp nội bộ.

Nếu bạn vì một lý do muốn giữ gìn lớp bên trong với tên ban đầu của nó, bạn có thể chỉ định:

-keep class somepackage.Foo$Currency 

Đó chỉ nên cần thiết nếu ứng dụng của bạn truy cập các lớp thông qua phản ánh.

16

Bạn có thể thử

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

Như đã trình bày về câu trả lời này Proguard won't keep a class member's enums

Chỉ cần đừng quên để đặt

-keepattributes InnerClasses 
Các vấn đề liên quan