Error al intentar probar análisis XML con Robolectric

Estoy usando Robolectric y tratando de probar el análisis de una respuesta XML. Estoy recibiendo la siguiente excepción:

java.lang.NoClassDefFoundError: java/lang/AutoCloseable at android.util.Xml.parse(Xml.java:80) at com.test.app.network.parser.soap.BaseSoapParser.doParse(BaseSoapParser.java:57) at com.test.app.network.parser.soap.RecipeParser.parse(RecipeParser.java:57) at com.test.app.network.command.RecipeCommand.searchRecipes(RecipeCommand.java:64) at com.test.app.data.PrepopulateDB.prepopulateDB(PrepopulateDB.java:53) at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:45) at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:42) at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) at org.robolectric.RobolectricTestRunner$2.evaluate(RobolectricTestRunner.java:230) at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:263) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:68) at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:47) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:231) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:60) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:229) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:50) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:222) at org.robolectric.RobolectricTestRunner$1.evaluate(RobolectricTestRunner.java:172) at org.junit.runners.ParentRunner.run(ParentRunner.java:300) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.lang.ClassNotFoundException: java.lang.AutoCloseable at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:306) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:247) at org.robolectric.bytecode.AsmInstrumentingClassLoader.loadClass(AsmInstrumentingClassLoader.java:100) at android.util.Xml.$$robo$$Xml_e8aa_parse(Xml.java:80) at android.util.Xml.parse(Xml.java) at com.test.app.network.parser.soap.BaseSoapParser.doParse(BaseSoapParser.java:57) at com.test.test.app.network.parser.soap.RecipeParser.parse(RecipeParser.java:57) at com.test.app.network.command.RecipeCommand.searchRecipes(RecipeCommand.java:64) at com.test.app.data.PrepopulateDB.prepopulateDB(PrepopulateDB.java:53) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) ... 22 more 

La cosa es que "AutoCloseable" fue agregado solamente en Java 7 y puesto que el androide utiliza Java 6 puedo entender porqué la clase no se encuentra – cualquier ayuda será apreciada.

Bibliotecas:

Robolectric-2.3-20140204.032758-112-jar-with-dependencies.jar

Android-all-4.4_r1-robolectric-0.jar / android-all-4.3_r2-robolectric-0.jar

Actualización: He probado esto con JDK 6 y Target API 18 con el mismo resultado.

Actualización 2: Parece que el origen del problema es esta clase: org.apache.harmony.xml.ExpatReader está utilizando AutoClosable que no está disponible en Java 6 o Android API 18.

En realidad esta interfaz está en el SDK de Android: https://developer.android.com/reference/java/lang/AutoCloseable.html

Se agrega en el nivel API 19

Antes del nivel 19, estaba allí pero "escondido".

Este error ocurre cuando compila su proyecto con una versión de API más alta que algunas de las clases requeridas, su objetivo es API 18, pero como Guillaume sais, al usar AutoCloseable está intentando cargar una clase que no se añade hasta que la API 19 .Su aplicación se bloquea en tiempo de ejecución. Necesitas modificar la versión minSDK de tu proyecto o considerar una alternativa.

Descargue el paquete SDK [1], extráigalo y luego actualice / sobrescriba su Eclipse y Android SDK (solo haga una copia de seguridad de eclipse y de la carpeta android-sdk de antemano). Por supuesto luego hacer todas las actualizaciones necesarias en el SDK y Eclipse IDE

[1] https://developer.android.com/sdk/index.html

  • XmlPullParser getAttributeValue devuelve null
  • Analizar el feed RSS de Android
  • Analizador de XML común de Android
  • ¿Cómo puede convertir el archivo XML local a org.ksoap2.serialization.SoapObject?
  • Mensaje de error XML de Android
  • XmlPullParserException sólo en ICS
  • Android: DOM vs SAX vs análisis XMLPullParser?
  • Parsing Soap Uso del servicio de Retrofit Estoy frente a una excepción como este (es decir) modelo de cuerpo desajustado en el modelo de sobre de clase en la respuesta
  • Análisis local de xml android con drawable
  • Análisis del archivo gpx local en Android
  • Análisis de un archivo XML en Java para obtener una lista de nombres
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.