2012-04-15 27 views
6

Tôi đang cố gắng để xáo trộn các ứng dụng Android của tôi tuy nhiên tôi nhận được lỗi sau:Proguard - tài liệu tham khảo chưa được giải quyết cho các thành viên lớp chương trình

[2012-04-15 19:55:51 - TmtAndroid] Proguard returned with error code 1. See console 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassPathElement: can't find referenced method 'org.apache.tools.ant.Project getProject()' in class proguard.ant.ClassPathElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassPathElement: can't find referenced method 'boolean isReference()' in class proguard.ant.ClassPathElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassPathElement: can't find referenced method 'java.lang.Object getCheckedRef(java.lang.Class,java.lang.String)' in class proguard.ant.ClassPathElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassPathElement: can't find referenced method 'java.lang.String[] list()' in class proguard.ant.ClassPathElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassPathElement: can't find referenced method 'void setLocation(java.io.File)' in class proguard.ant.ClassPathElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassSpecificationElement: can't find referenced method 'boolean isReference()' in class proguard.ant.ClassSpecificationElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ClassSpecificationElement: can't find referenced method 'java.lang.Object getCheckedRef(java.lang.Class,java.lang.String)' in class proguard.ant.ClassSpecificationElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ConfigurationElement: can't find referenced method 'boolean isReference()' in class proguard.ant.ConfigurationElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ConfigurationElement: can't find referenced method 'java.lang.Object getCheckedRef(java.lang.Class,java.lang.String)' in class proguard.ant.ConfigurationElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ConfigurationTask: can't find referenced method 'org.apache.tools.ant.Project getProject()' in class proguard.ant.ConfigurationTask 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.FilterElement: can't find referenced method 'boolean isReference()' in class proguard.ant.FilterElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.FilterElement: can't find referenced method 'java.lang.Object getCheckedRef(java.lang.Class,java.lang.String)' in class proguard.ant.FilterElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.KeepSpecificationElement: can't find referenced method 'boolean isReference()' in class proguard.ant.KeepSpecificationElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.KeepSpecificationElement: can't find referenced method 'java.lang.Object getCheckedRef(java.lang.Class,java.lang.String)' in class proguard.ant.KeepSpecificationElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.MemberSpecificationElement: can't find referenced method 'boolean isReference()' in class proguard.ant.MemberSpecificationElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.MemberSpecificationElement: can't find referenced method 'java.lang.Object getCheckedRef(java.lang.Class,java.lang.String)' in class proguard.ant.MemberSpecificationElement 
[2012-04-15 19:55:51 - TmtAndroid] Warning: proguard.ant.ProGuardTask: can't find referenced method 'org.apache.tools.ant.Project getProject()' in class proguard.ant.ProGuardTask 
[2012-04-15 19:55:51 - TmtAndroid]  You should check if you need to specify additional program jars. 
[2012-04-15 19:55:51 - TmtAndroid] Warning: there were 17 unresolved references to program class members. 
[2012-04-15 19:55:51 - TmtAndroid]   Your input classes appear to be inconsistent. 
[2012-04-15 19:55:51 - TmtAndroid]   You may need to recompile them and try again. 
[2012-04-15 19:55:51 - TmtAndroid]   Alternatively, you may have to specify the option 
[2012-04-15 19:55:51 - TmtAndroid]   '-dontskipnonpubliclibraryclassmembers'. 
[2012-04-15 19:55:51 - TmtAndroid] java.io.IOException: Please correct the above warnings first. 
[2012-04-15 19:55:51 - TmtAndroid] at proguard.Initializer.execute(Initializer.java:321) 
[2012-04-15 19:55:51 - TmtAndroid] at proguard.ProGuard.initialize(ProGuard.java:211) 
[2012-04-15 19:55:51 - TmtAndroid] at proguard.ProGuard.execute(ProGuard.java:86) 
[2012-04-15 19:55:51 - TmtAndroid] at proguard.ProGuard.main(ProGuard.java:492) 

Khi tôi thêm

-dontwarn proguard.ant.** 

để proguard.cfg , apk được xuất nhưng sau khi cài đặt trên điện thoại, nó bị treo, vì vậy nó không phải là giải pháp trong trường hợp này ...

Tôi nên làm gì để giải quyết những cảnh báo này? Đó là tương tác đầu tiên của tôi với Proguard ...

Cảm ơn

Trả lời

1

cách tiếp cận chung của tôi khi làm việc với Proguard là bắt đầu với một rất nhỏ .pro tập tin với tất cả mọi thứ bật và sau đó bắt đầu tắt tùy chọn obfuscation/tối ưu hóa/co rút khác nhau cho đến khi bình kết quả chạy đúng.

Vì vậy, tôi khuyên bạn nên chạy qua Proguard examples page và thử các tùy chọn -keepdontXXX khác nhau mà họ đề xuất.

Ngoài ra, không ứng dụng của bạn (hoặc khuôn khổ Android) tận dụng phương pháp có nguồn gốc, serialization, phản ánh, phương thức callback, chú thích, vv ...? Tài liệu ví dụ cung cấp các cài đặt mà bạn cần phải chuyển đến Proguard để đảm bảo thao tác bytecode Proguard không phá vỡ các tính năng này.

Ví dụ, tôi không quen thuộc với nền tảng Android, nhưng tôi tin rằng nó sử dụng một số loại khung công tác XML cho biết cách tải/sử dụng các lớp Java mà bạn xác định. Nếu đó là trường hợp, và bạn có Proguard obfuscate tên lớp hoặc gói, khung XML sẽ không thể tìm thấy những lớp đó nữa.

+1

Các lớp duy nhất tham chiếu XML không được biên dịch thành tài nguyên là các hoạt động và dịch vụ được tham chiếu trong AndroidManifest.xml và nếu bạn sử dụng các cấu hình do Android cung cấp cho Proguard, nó sẽ tự động đánh dấu các cấu hình đó bằng "-keep. .. " –

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