2012-06-28 20 views
21

Tengo problemas con ProGuard y Android.Uso de ProGuard con Android

He buscado en la web durante horas y he encontrado varias formas de obstruir una aplicación de Android. Por ahora estoy tratando uno que parece ser el más fácil, por lo que:

  • he creado un archivo de config.cfg en el directorio raíz de mi proyecto
  • añadí proguard.config=config.cfg en mi project.properties
  • El I se utiliza el asistente de exportación de Eclipse para exportar & firmar el archivo APK

recibí un mensaje diciendo Proguard returned with error code 1. See console y en la consola:

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. 

Incluso si uso la configuración proporcionada por el sitio web oficial Proguard, o el valor por defecto que tengo errores.
Aquí es mi costumbre de configuración (miProyecto/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>; 
} 

no puedo conseguir que funcione ... alguna idea sería muy apreciada!

NOTA: utilizo el Librairies Jackson JSON que se almacenan en la carpeta libs de mi proyecto

Respuesta

33

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

El androide Ant/Eclipse construye ya especificar -injars/-libraryjars para usted. Si los especifica de nuevo en su configuración, ProGuard nota que están duplicados. Entonces no especifique -injars/-libraryjars.

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

org.w3c.dom.bootstrap.DOMImplementationRegistry no está presente en el código de entrada, sin embargo, com.fasterxml.jackson.databind.ext.DOMSerializer lo está utilizando. Si la aplicación funciona de todos modos, puede dejar que ProGuard acepto con:

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

Thx para ayudar. La compilación/ofuscación funciona sin errores, pero cuando hago clic en el botón que me redirige a una actividad que tiene un objeto que utiliza la biblioteca JSON, la aplicación se bloquea ... – Flawyte

+0

Todavía no se puede poner en funcionamiento, no hay ideas en absoluto ?? – Flawyte

+0

sí, para mí también ...no está arrojando un error, pero mi flexJson ha dejado de funcionar – sheetal

1

Me acaban de pegado con el mismo problema, y ​​lo resolví haciendo referencia al archivo rt.jar JRE:

-libraryjars/lib/rt.jar

espero que ayude

Cuestiones relacionadas