2012-06-28 8 views
21

Ho problemi con ProGuard e Android.Utilizzo di ProGuard con Android

Ho cercato sul Web per ore e ho trovato diversi modi per offuscare un'applicazione Android. Per ora sto cercando uno che sembra essere il più facile, quindi:

  • ho creato un file config.cfg nella directory principale del mio progetto
  • ho aggiunto proguard.config=config.cfg nel mio project.properties
  • The I utilizzato la procedura guidata di esportazione Eclipse per esportare & segno il file .apk

ho ricevuto un messaggio che dice Proguard returned with error code 1. See console e nella console:

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. 

Anche se uso il config fornito dal sito ufficiale Proguard, o quello di default che ho errori.
Ecco mia abitudine 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>; 
} 

non riesco a farlo funzionare ... qualche idea sarebbe molto apprezzato!

NOTA: io uso le Librairies Jackson JSON che sono memorizzati nella cartella libs del mio progetto

risposta

33

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

L'Android Ant/Eclipse build già specificare -injars/-libraryjars per voi. Se si specificano di nuovo nella configurazione, ProGuard nota che sono duplicati. Quindi non specificare -injars/-libraryjars.

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

org.w3c.dom.bootstrap.DOMImplementationRegistry non è presente nel codice di ingresso, tuttavia com.fasterxml.jackson.databind.ext.DOMSerializer lo utilizza. Se la vostra applicazione funziona in ogni caso, si può lasciare ProGuard accettarlo con:

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

Thx per l'aiuto. Compilation/offuscamento funziona senza errori, ma poi quando clicco sul pulsante che mi reindirizza ad un'attività che ha un oggetto che usa la libreria JSON l'applicazione si blocca ... – Flawyte

+0

Ancora non riesco a farlo funzionare, nessuna idea ?? – Flawyte

+0

sì anche per me ...non sta generando errori ma il mio flexJson ha smesso di funzionare – sheetal

1

Ho appena rimasto bloccato con lo stesso problema, e ho risolto facendo riferimento al file rt.jar JRE:

-libraryjars/lib/rt.jar

Spero che aiuta