2012-06-28 17 views
21

Mam problemy z ProGuardem i Androidem.Używanie ProGuard z Androidem

Szukałem w Internecie przez wiele godzin i znalazłem wiele sposobów na pozbycie się aplikacji na Androida. Na razie staram jeden, który wydaje się być najprostszym, więc:

  • stworzyłem plik w katalogu głównym mojego projektu
  • I dodaje proguard.config=config.cfg w moim project.properties
  • I config.cfg użyciu kreatora eksportowej Eclipse eksportować & podpisania pliku apk

mam komunikat mówiący Proguard returned with error code 1. See console oraz w konsoli:

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. 

Nawet jeśli używam config dostarczone przez oficjalnej stronie PROGUARD lub domyślny mam błędów.
Oto mój zwyczaj config (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>; 
} 

nie mogę zmusić go do pracy ... Każdy pomysł będzie bardzo mile widziane!

UWAGA: używam librairies Jackson JSON, które są przechowywane w folderze libs mojego projektu

Odpowiedz

33

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

Android Ant/Eclipse buduje już określić -injars/-libraryjars dla Ciebie. Jeśli określisz je ponownie w swojej konfiguracji, ProGuard zauważy, że są one duplikowane. Więc nie podawaj -injars/-libraryjars.

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

org.w3c.dom.bootstrap.DOMImplementationRegistry nie w kodzie wejściowym jeszcze com.fasterxml.jackson.databind.ext.DOMSerializer się przy użyciu. Jeśli twoje prace aplikacyjne W każdym razie, można pozwolić ProGuard przyjąć go z:

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

Thx za pomoc. Kompilacja/zaciemnianie działa bezbłędnie, ale kiedy klikam na przycisk przekierowujący mnie do działania, które ma obiekt, który używa biblioteki JSON, aplikacja się zawiesza ... – Flawyte

+0

Nadal nie mogę go uruchomić, żadnych pomysłów. ?? – Flawyte

+0

tak dla mnie też ...to nie jest błąd rzucania, ale mój flexJson przestał działać – sheetal

1

prostu utknąłem z tym samym problemem, a ja go rozwiązać poprzez odniesienie plik rt.jar JRE:

-libraryjars/lib/rt.jar

mam nadzieję, że to pomaga warunkiem