2012-07-23 34 views
23

Tôi có một nhóm lớp học sử dụng ví dụ: một chú thích @Singleton giống như vậyGiữ lớp chú thích trong Proguard

@Singleton 
public class ImageCache 

mà tôi muốn giữ lại. Làm thế nào tôi có thể cấu hình một tuyên bố bảo vệ proguard để nó áp dụng cho tất cả các lớp có chú thích đó.

Btw về ngữ cảnh Tôi cần điều này cho một ứng dụng bằng Roboguice trên Android, đó là lý do tôi thêm thẻ. Có thể giúp đỡ người khác.

Trả lời

32

ProGuard dựa trên cấu hình giống như java với thẻ hoang dã. Nó yêu cầu tên lớp hoàn toàn đủ điều kiện. Điều này sẽ làm việc:

-keep @com.google.inject.Singleton public class * 
+6

một Đây là một miếng vàng. Đó là damn hữu ích để giữ jackson 1, jackson 2 và gson chú thích các lớp học. ;) Eric, tôi tin rằng hướng dẫn proguard nên rõ ràng hơn về việc giữ các lớp, chú thích, các trường, chú thích, vv .. – Snicolas

+0

Tôi cũng phải thêm các lớp giữ lớp. Nhưng bạn đã đưa ra một ý tưởng hay, vì vậy +1 –

+2

Ngoài ra nếu bạn sử dụng Chú thích tùy chỉnh, hãy đảm bảo RetentionPolicy là CLASS hoặc RUNTIME, nếu không proguard sẽ không thể tìm thấy chúng. – Alex

2

Đầu tiên xác định một chú thích

public @interface DoNotStrip {} 

Sau đó đặt điều này trong proguard.cfg:

-keep,allowobfuscation @interface com.something.DoNotStrip 

# Do not strip any method/class that is annotated with @DoNotStrip 
-keep @com.something.DoNotStrip class * 
-keepclassmembers class * { 
    @com.something.DoNotStrip *; 
} 
Các vấn đề liên quan