2012-06-28 50 views
21

Tôi gặp sự cố khi xử lý với ProGuard và Android.Sử dụng ProGuard với Android

Tôi đã tìm kiếm trên web hàng giờ và đã tìm thấy nhiều cách để ám ảnh một ứng dụng Android. Để bây giờ tôi đang cố gắng một trông đến là dễ nhất, vì vậy:

  • Tôi tạo ra một tập tin config.cfg trong thư mục gốc của dự án của tôi
  • tôi thêm proguard.config=config.cfg trong tôi project.properties
  • I sử dụng trình hướng dẫn xuất khẩu Eclipse để xuất khẩu & dấu file .apk

tôi nhận được một thông báo nói Proguard returned with error code 1. See console và trong giao diện điều khiển:

Proguard returned with error code 1. See console 
Note: there were 3847 duplicate class definitions. 
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry 
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry 
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry 
Warning: com.fasterxml.jackson.databind.ext.DOMSerializer: can't find referenced class org.w3c.dom.bootstrap.DOMImplementationRegistry 
     You should check if you need to specify additional program jars. 
Warning: there were 4 unresolved references to classes or interfaces. 
     You may need to specify additional library jars (using '-libraryjars'). 
Error: Please correct the above warnings first. 

Thậm chí nếu tôi sử dụng cấu hình được cung cấp bởi các trang web Proguard chính thức, hoặc mặc định một Tôi có lỗi.
Dưới đây là cấu hình tùy chỉnh của tôi (myproject/config.cfg):

-injars  bin/classes 
-injars  libs 
-libraryjars "C:\Program Files\Android\android-sdk\platforms\android-13\android.jar" 

-dontskipnonpubliclibraryclasses 
-optimizationpasses 5 
-printmapping map.txt 
-flattenpackagehierarchy 
-dontpreverify 
-repackageclasses '' 
-allowaccessmodification 
-optimizations !code/simplification/arithmetic 
-keepattributes *Annotation* 

-keep public class * extends android.app.Application 
-keep public class * extends android.app.Activity 
-keep public class * extends android.app.PreferenceActivity 
-keep public class * extends android.view.View 
-keep public class * extends android.widget.BaseAdapter 
-keep public class * implements android.view.View.OnTouchListener 

-keep public class * extends android.view.View { 
    public <init>(android.content.Context); 
    public <init>(android.content.Context, android.util.AttributeSet); 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
    public void set*(...); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet); 
} 

-keepclasseswithmembers class * { 
    public <init>(android.content.Context, android.util.AttributeSet, int); 
} 

-keepclassmembers class * extends android.content.Context { 
    public void *(android.view.View); 
    public void *(android.view.MenuItem); 
} 

-keepclassmembers class * implements android.os.Parcelable { 
    static android.os.Parcelable$Creator CREATOR; 
} 

-keepclassmembers class **.R$* { 
    public static <fields>; 
} 

tôi không thể có được nó để làm việc ... bất kỳ ý tưởng sẽ được đánh giá rất nhiều!

LƯU Ý: tôi sử dụng librairies Jackson JSON được lưu trữ trong thư mục libs của dự án của tôi

Trả lời

33

1) ProGuard manual > Troubleshooting > Note: duplicate definition of program/library class

Android Ant/Eclipse bản xây dựng đã xác định -injars/-libraryjars cho bạn. Nếu bạn chỉ định lại chúng trong cấu hình của mình, ProGuard lưu ý rằng chúng được sao chép. Vì vậy, không chỉ định -injars/-libraryjars.

2) ProGuard manual > Troubleshooting > Warning: can't find referenced class

org.w3c.dom.bootstrap.DOMImplementationRegistry là không có mặt trong các mã đầu vào, nhưng com.fasterxml.jackson.databind.ext.DOMSerializer đang sử dụng nó. Nếu ứng dụng của công trình của bạn dù sao, bạn có thể cho ProGuard chấp nhận nó với:

-dontwarn org.w3c.dom.bootstrap.DOMImplementationRegistry 
+0

Thx để được trợ giúp. Biên dịch/obfuscation hoạt động mà không có lỗi nhưng sau đó khi tôi clic trên nút chuyển hướng tôi đến một hoạt động có một đối tượng sử dụng thư viện JSON ứng dụng bị treo ... – Flawyte

+0

Vẫn không thể làm cho nó hoạt động, không có ý tưởng nào cả ?? – Flawyte

+0

vâng tôi cũng vậy ...nó không phải là ném lỗi nhưng flexJson của tôi đã ngừng làm việc – sheetal

1

Tôi chỉ đã bị mắc kẹt với cùng một vấn đề, và tôi giải quyết nó bằng cách tham khảo JRE tập tin rt.jar:

-libraryjars/lib/rt.jar

tôi hy vọng nó giúp

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