NullPointerException al usar el archivo XML en res / raw con Proguard

Estoy utilizando un serializador XML simple en mi aplicación y parecen haberlo excluido con éxito de la ofuscación Proguard mediante el uso de las siguientes líneas en proguard.cfg, gracias a esta pregunta SO :

-keep public class org.simpleframework.**{ *; } -keep class org.simpleframework.xml.**{ *; } -keep class org.simpleframework.xml.core.**{ *; } -keep class org.simpleframework.xml.util.**{ *; } 

Puedo firmar y exportar el apk, pero cuando trato de ejecutar mi aplicación, se bloquea con una NullPointerException al intentar acceder a un archivo XML en el directorio res / raw (R.raw.home_screen_menu).

Excluyo a R.java con esto:

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

He estado jugando con este archivo de configuración todo el día, pero sin ninguna suerte. ¿Alguien ha encontrado este problema o algo así? Lo último que he probado es usar las opciones de "adaptresource" como las que se muestran a continuación:

 -adaptresourcefilenames **.xml -adaptresourcefilecontents **.xml 

Para referencia, he aquí el contenido de mi proguard.cfg:

 #Use 5 step of optimization -optimizationpasses 5 #When not preverifing in a case-insensitive filing system, such as Windows. This tool will unpack your processed jars,(if using windows you should then use): -dontusemixedcaseclassnames #Specifies not to ignore non-public library classes. As of version 4.5, this is the default setting -dontskipnonpubliclibraryclasses #Preverification is irrelevant for the dex compiler and the Dalvik VM, so we can switch it off with the -dontpreverify option. -dontpreverify #Specifies to write out some more information during processing. If the program terminates with an exception, this option will print out the entire stack trace, instead of just the exception message. -verbose #The -optimizations option disables some arithmetic simplifications that Dalvik 1.0 and 1.5 can't handle. Note that the Dalvik VM also can't handle aggressive overloading (of static fields). #To understand or change this check http://proguard.sourceforge.net/index.html#/manual/optimizations.html -optimizations !code/simplification/arithmetic,!field/*,!class/merging/* -dump ../bin/class_files.txt -printseeds ../bin/seeds.txt -printusage ../bin/unused.txt -printmapping ../bin/mapping.txt -dontskipnonpubliclibraryclassmembers #Ignore warnings for roboguice.activity.RoboAccountAuthenticatorActivity -dontwarn roboguice.activity.RoboAccountAuthenticatorActivity -keep public class * extends android.app.Activity -keep public class * extends android.app.Application -keep public class * extends android.app.Service -keep public class * extends android.content.BroadcastReceiver -keep public class * extends android.content.ContentProvider -keep public class * extends android.app.backup.BackupAgentHelper -keep public class * extends android.preference.Preference -keep public class com.android.vending.licensing.ILicensingService -keep class com.google.inject.Binder # Keep annotations -keepattributes *Annotation* -keepattributes Signature #To remove debug logs: -assumenosideeffects class android.util.Log { public static *** d(...); public static *** v(...); public static *** w(...); } # Roboguice -keepclassmembers class * { @com.google.inject.Inject <init>(...); } # SimpleXML -keep public class org.simpleframework.**{ *; } -keep class org.simpleframework.xml.**{ *; } -keep class org.simpleframework.xml.core.**{ *; } -keep class org.simpleframework.xml.util.**{ *; } -dontwarn javax.xml.stream.** -dontwarn javax.xml.namespace.** -keep public class roboguice.** # There's no way to keep all @Observes methods, so use the On*Event convention to identify event handlers -keepclassmembers class * { void *(**On*Event); } -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 * { native <methods>; } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet); } -keepclasseswithmembers class * { public <init>(android.content.Context, android.util.AttributeSet, int); } -keepclassmembers enum * { public static **[] values(); public static ** valueOf(java.lang.String); } -keep class * implements android.os.Parcelable { public static final android.os.Parcelable$Creator *; } -keepclassmembers class * implements android.os.Parcelable { static android.os.Parcelable$Creator CREATOR; } -keepclassmembers class **.R$* { public static <fields>; } 

Tengo exactamente el mismo problema. Finalmente lo resuelvo gracias a esta pregunta y respuesta. Dejé aquí la configuración final:

build.gradle:

 buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } dependencies { compile('org.simpleframework:simple-xml:2.7.1') { exclude module: 'stax' exclude module: 'stax-api' exclude module: 'xpp3' } } 

proguard-rules.pro (además de la configuración predeterminada de proguard)

 -dontwarn javax.xml.** -keep public class org.simpleframework.**{ *; } -keep class org.simpleframework.xml.**{ *; } -keep class org.simpleframework.xml.core.**{ *; } -keep class org.simpleframework.xml.util.**{ *; } -keepattributes Signature -keepattributes *Annotation* # Ignore our XML Serialization classes -keep public class your.annotated.pojo.models.*{ public protected private *; } 

Espero que ayude a alguien

Resulta que los archivos sin procesar se dejaron solos y bien. El problema era mi clase utilizada para la serialización con anotaciones para el serializador XML simple. Añadí instrucciones de registro a mi aplicación y encontré este error en la línea ofensiva: "Attribute 'id' no tiene una coincidencia en la clase com.xxx.ListViewItems en la línea 2". Esto me hizo darme cuenta de que la variable "id" privada estaba siendo ofuscada y no reconocida por el serializador Simple XML. Aquí está el código de ListViewItems.java:

 @Attribute(required=false) private String id; // This was being obfuscated and thus unrecognizable! 

Esto es lo que he añadido a Proguard para saltar completamente ofuscando una clase (probablemente hay una mejor manera):

 # Ignore our XML Serialization classes -keep public class com.xxx.ListViewItems { public protected private *; } 
  • Uso de SimpleXML con Android y Gradle
  • Uso conveniente de Android XmlResourceParser?
  • SimpleXML falla en Lenovo P90
  • XML con la biblioteca SimpleXML - Rendimiento en Android
  • Marco XML simple en android, atributo de clase
  • Problema con Retrofit y simple - intento de hacer un lector de RSS para Android
  • Problema de velocidad de Android con la deserialización mediante SimpleXML
  • Retrofit2 + SimpleXML en Kotlin: MethodException: La anotación debe marcar un método set o get
  • Cómo analizar el XML de SimpleXML
  • SimpleXML Constructor Exception - No se puede crear Inner Class
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.