Error de ProGuard para Android con org.xmlpull.v1.XmlPullParser

Cuando mi aplicación se crea con ProGuard, falla con el siguiente mensaje. Utilizo un proguard.cfg predeterminado generado por SDK de Android con algunos -ibibraryjars. ¿Qué puedo hacer por él?

[2011-03-17 09:27:04 - MyProject] Proguard returned with error code 1. See console [2011-03-17 09:27:04 - MyProject] Note: there were 4247 duplicate class definitions. [2011-03-17 09:27:04 - MyProject] Warning: library class android.content.res.XmlResourceParser extends or implements program class org.xmlpull.v1.XmlPullParser [2011-03-17 09:27:04 - MyProject] Warning: library class android.content.Intent depends on program class org.xmlpull.v1.XmlPullParser [2011-03-17 09:27:04 - MyProject] Warning: library class android.graphics.drawable.AnimationDrawable depends on program class org.xmlpull.v1.XmlPullParser [2011-03-17 09:27:04 - MyProject] Warning: library class android.graphics.drawable.BitmapDrawable depends on program class org.xmlpull.v1.XmlPullParser [2011-03-17 09:27:04 - MyProject] Warning: library class android.graphics.drawable.Drawable depends on program class org.xmlpull.v1.XmlPullParser [2011-03-17 09:27:04 - MyProject] Warning: library class android.graphics.drawable.Drawable depends on program class org.xmlpull.v1.XmlPullParser [2011-03-17 09:27:04 - MyProject] Warning: library class android.graphics.drawable.Drawable depends on program class org.xmlpull.v1.XmlPullParser [2011-03-17 09:27:04 - MyProject] Warning: library class android.view.LayoutInflater depends on program class org.xmlpull.v1.XmlPullParser [2011-03-17 09:27:04 - MyProject] Warning: library class android.view.LayoutInflater depends on program class org.xmlpull.v1.XmlPullParser [2011-03-17 09:27:04 - MyProject] You should check if you need to specify additional program jars. [2011-03-17 09:27:04 - MyProject] Warning: there were 9 instances of library classes depending on program classes. [2011-03-17 09:27:04 - MyProject] You must avoid such dependencies, since the program classes will [2011-03-17 09:27:04 - MyProject] be processed, while the library classes will remain unchanged. [2011-03-17 09:27:04 - MyProject] java.io.IOException: Please correct the above warnings first. [2011-03-17 09:27:04 - MyProject] at proguard.Initializer.execute(Initializer.java:321) [2011-03-17 09:27:04 - MyProject] at proguard.ProGuard.initialize(ProGuard.java:211) [2011-03-17 09:27:04 - MyProject] at proguard.ProGuard.execute(ProGuard.java:86) [2011-03-17 09:27:04 - MyProject] at proguard.ProGuard.main(ProGuard.java:492) 

Aparentemente, org.xmlpull.v1.XmlPullParser no es una clase de programa. He actualizado ProGuard a la versión más reciente (4.6), pero tienen las mismas advertencias.

Agregue esta línea a proguard-project.txt

 -dontwarn org.xmlpull.v1.** 

Y esta línea a project.properties

 proguard.config=proguard-project.txt 

He resuelto esto utilizando esta configuración en el archivo proguard:

 -dontwarn org.kobjects.** -dontwarn org.ksoap2.** -dontwarn org.kxml2.** -dontwarn org.xmlpull.v1.** -keep class org.kobjects.** { *; } -keep class org.ksoap2.** { *; } -keep class org.kxml2.** { *; } -keep class org.xmlpull.** { *; } -dontusemixedcaseclassnames -dontskipnonpubliclibraryclasses -dontoptimize -dontpreverify 

Todavía no tengo la solución para proguard ejecutar a través de eclipse para android, pero si ejecuta proguard manualmente desde la línea de comandos, puede poner lo siguiente en su proguard.cfg :

 -basedirectory /home/pjv/workspace/collectionista-repo/collectionista-main -injars /tmp/android_4500371803543847111.jar -injars libs/joda-time-1.6.jar(!META-INF/MANIFEST.MF) -injars libs/FlurryAgent.jar(!META-INF/MANIFEST.MF) -injars libs/veecheck-2.0.jar(!META-INF/MANIFEST.MF) -injars libs/commons-lang-2.4.jar(!META-INF/MANIFEST.MF,!META-INF/NOTICE.txt,!META-INF/LICENSE.txt) -injars libs/OIAbout-lib-temporary.jar(!META-INF/MANIFEST.MF) -injars libs/libGoogleAnalytics.jar(!META-INF/MANIFEST.MF) -injars libs/xstream-1.3.1.jar(!META-INF/MANIFEST.MF) -injars libs/ZQL_custom.jar(!META-INF/MANIFEST.MF) -injars libs/xpp3_min-1.1.4c.jar(!META-INF/MANIFEST.MF) -injars libs/GoogleAdMobAdsSdk-4.1.0.jar(!META-INF/MANIFEST.MF) -injars libs/bugsense-trace.jar(!META-INF/MANIFEST.MF) -outjars /tmp/android_1348923171424559204.jar -libraryjars /opt/android-sdk/android-sdk-linux_x86-1.6_r1/platforms/android-12/android.jar(!org/xmlpull/v1/XmlPullParser.class,!org/xmlpull/v1/XmlPullParserException.class) 

Observe cómo se filtra XmlPullParser.class desde el jar API de Android.

No se preocupe por las advertencias relacionadas con XmlPullParser todavía. Corrija los errores y otras advertencias primero, y si es necesario, use -ignorewarnings en su proguard.cfg .

De acuerdo con el registro parcial que proporciona, la clase de ejecución de Android org.xmlpull.v1.XmlPullParser ha terminado en su código de programa. Debe asegurarse de que no esté presente en bin / classes o en algún jar en lib , porque ya está presente en la biblioteca jar android.jar.

Además, tiene 4247 definiciones de clase duplicadas. Esto es probablemente debido a la especificación de "algunos -ibraryjars" como usted menciona. Supongo que estos frascos de la biblioteca ya están incluidos automáticamente por el script de compilación, por lo que no debe especificar de nuevo.

Creo que su paquete jar incluye XmlPullParser clase, y android.jar también incluyen esto. Así que puede quitar las clases org.xmlpull.* En el paquete jar, y volver a crear.

Para mí podría solucionarlo quitando mi build.gradle modificado anterior

Quite:

  minifyEnabled true shrinkResources true 

Y volvió al ajuste original

 minifyEnabled false 
  • ¿Tiene Android SDK intencionalmente utilizar una versión antigua de ProGuard
  • Android Roboguice proguard warning
  • Reduciendo el tamaño de la aplicación para Android (apk)
  • Problema de Instabug Proguard
  • ¿Por qué Proguard mantiene la clase de actividad en Android?
  • Proguard elimina clase Anonymous en clase Anonymous en Java
  • Con ProGuard, ¿cuál es el impacto en la estrategia de pruebas?
  • ProGuard: no puede encontrar la clase referenciada com.google.android.gms.R
  • Android: la aplicación se bloquea en dispositivos Pre-Lollipop
  • Org.apache.commons.collections.BeanMap: no se puede encontrar la clase referenciada java.beans.Introspector
  • Uso de Proguard para obfuscar la aplicación Android con las bibliotecas de Dropbox.com
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.