2013-10-14 20 views
5

tôi có như sau:đúng cấu hình Proguard để giữ tĩnh lớp bên

public class A extends B { 
    static class C { 
     Object field1; 
     int field2; 
     boolean field3; 
    } 
} 

tôi không có thể nhận được các lớp C thông qua phản ánh!

Tôi đã thử những điều sau đây:

-keep class com.path.to._class.A$** {*;} 

-keep class com.path.to._class.A$* {*;} 

-keep class com.path.to._class.A$C {*;} 

-keep class com.path.to._class.A$C { 
    <fields>; 
} 

-keep class com.path.to._class.A$C { 
    Object field1; 
    int field2; 
    boolean field3; 
} 

Không có ở trên làm việc. Tôi đang làm điều gì đó hoàn toàn sai ở đây?

Có lẽ đáng nói đến là B mở rộng Chế độ xem ...

+0

Không cần phải nói, mà không cần chạy Proguard này làm việc tốt ... – TacB0sS

Trả lời

5

Tất cả những thứ này sẽ hoạt động (chỉ Object -> java.lang.Object). Bạn có thể kiểm tra bin/proguard/seed.txt để xem chúng có được liệt kê không. Nếu không, bạn có thể sửa đổi tệp cấu hình sai hoặc có thể có lỗi đánh máy trong tên.

+0

Đối với một số lý do thêm InnerClasses -keepattribute đã làm công việc, nhưng tại sao? nó cũng làm rối loạn các lớp bên trong khác. – TacB0sS

+0

Các tùy chọn bảo trì bảo tồn các lớp học với tên ban đầu của nó, đó là đủ để phản ánh bình thường. Option -keepattributes InnerClasses giữ các thuộc tính tùy chọn chỉ cần thiết cho các kiểu phản chiếu ít phổ biến hơn. Vì vậy, nó phụ thuộc vào mã của bạn và các lỗi mà bạn nhận được. –

0
-keep public class com.path.to._class.A$C {*;} 

này đang làm việc cho tôi, đăng rất muộn nhưng vẫn có thể giúp đỡ người khác phải đối mặt với vấn đề này

Các vấn đề liên quan