2016-07-17 23 views
1

Ich versuche, Apache POI auf Android zu verwenden, um das zu tun, habe ich ein Großprojekt auf Eclipse erstellt, aber wenn ich die Task AndroidInstall Gradle Task ausführen, bekomme ich einen Fehler während der Dex-Schritt. (Run Aufgabe arbeitet)Fehler beim Dex mit einem Projekt mit Javafx und Apache POI

hier den Fehler:

Uncaught translation error: java.lang.IllegalArgumentException: already added: Ljavax/xml/stream/EventFilter; 
Uncaught translation error: java.lang.IllegalArgumentException: already added: Ljavax/xml/stream/FactoryConfigurationError; 
Uncaught translation error: java.lang.IllegalArgumentException: already added: Ljavax/xml/stream/FactoryFinder; 
Uncaught translation error: java.lang.IllegalArgumentException: already added: Ljavax/xml/stream/FactoryFinder$1; 
Uncaught translation error: java.lang.IllegalArgumentException: already added: Ljavax/xml/stream/FactoryFinder$ClassLoaderFinder; 
Uncaught translation error: java.lang.IllegalArgumentException: already added: Ljavax/xml/stream/FactoryFinder$ClassLoaderFinderConcrete; 
Uncaught translation error: java.lang.IllegalArgumentException: already added: Ljavax/xml/stream/Location; 
Uncaught translation error: java.lang.IllegalArgumentException: already added: Ljavax/xml/stream/StreamFilter; 
Uncaught translation error: java.lang.IllegalArgumentException: already added: Ljavax/xml/stream/XMLEventFactory; 

UNEXPECTED TOP-LEVEL EXCEPTION: 
java.lang.RuntimeException: Translation has been interrupted 
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:613) 
at com.android.dx.command.dexer.Main.runMultiDex(Main.java:366) 
at com.android.dx.command.dexer.Main.run(Main.java:275) 
at com.android.dx.command.dexer.Main.main(Main.java:245) 
at com.android.dx.command.Main.main(Main.java:106) 
Caused by: java.lang.InterruptedException: Too many errors 
at com.android.dx.command.dexer.Main.processAllFiles(Main.java:605) 
... 4 more 
16:41:25.082 [ERROR] [org.gradle.api.internal.project.ant.AntLoggingAdapter] [ant:java] Java Result: 2 
16:41:25.083 [DEBUG] [org.gradle.api.internal.project.ant.AntLoggingAdapter] Setting project property: dexResult -> 2 
16:41:25.084 [DEBUG] [org.gradle.api.Project] Dex result value = 2 
16:41:25.093 [DEBUG] [org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter] Finished executing task ':dex' 
16:41:25.094 [LIFECYCLE] [class org.gradle.TaskExecutionLogger] :dex FAILED 
16:41:25.095 [INFO] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] :dex (Thread[Daemon worker Thread 2,5,main]) completed. Took 2 mins 19.455 secs. 
16:41:25.095 [DEBUG] [org.gradle.execution.taskgraph.AbstractTaskPlanExecutor] Task worker [Thread[Daemon worker Thread 2,5,main]] finished, busy: 21 mins 29.722 secs, idle: 0.053 secs 
16:41:25.103 [ERROR] [org.gradle.BuildExceptionReporter] 
16:41:25.108 [ERROR] [org.gradle.BuildExceptionReporter] FAILURE: Build failed with an exception. 
16:41:25.109 [ERROR] [org.gradle.BuildExceptionReporter] 
16:41:25.109 [ERROR] [org.gradle.BuildExceptionReporter] * What went wrong: 
16:41:25.109 [ERROR] [org.gradle.BuildExceptionReporter] Execution failed for task ':dex'. 
16:41:25.110 [ERROR] [org.gradle.BuildExceptionReporter] > warning: Ignoring InnerClasses attribute for an anonymous inner class 
16:41:25.110 [ERROR] [org.gradle.BuildExceptionReporter] (org.apache.xmlbeans.XmlBeans$1) that doesn't come with an 
16:41:25.111 [ERROR] [org.gradle.BuildExceptionReporter] associated EnclosingMethod attribute. This class was probably produced by a 
16:41:25.111 [ERROR] [org.gradle.BuildExceptionReporter] compiler that did not target the modern .class file format. The recommended 
16:41:25.112 [ERROR] [org.gradle.BuildExceptionReporter] solution is to recompile the class from source, using an up-to-date compiler 
16:41:25.112 [ERROR] [org.gradle.BuildExceptionReporter] and without specifying any "-target" type options. The consequence of ignoring 
16:41:25.112 [ERROR] [org.gradle.BuildExceptionReporter] this warning is that reflective operations on this class will incorrectly 
16:41:25.115 [ERROR] [org.gradle.BuildExceptionReporter] indicate that it is *not* an inner class. 
16:41:25.115 [ERROR] [org.gradle.BuildExceptionReporter] warning: Ignoring InnerClasses attribute for an anonymous inner class 
16:41:25.116 [ERROR] [org.gradle.BuildExceptionReporter] (org.apache.xmlbeans.XmlSimpleList$1) that doesn't come with an 
16:41:25.140 [ERROR] [org.gradle.BuildExceptionReporter] associated EnclosingMethod attribute. This class was probably produced by a 
16:41:25.140 [ERROR] [org.gradle.BuildExceptionReporter] compiler that did not target the modern .class file format. The recommended 
16:41:25.140 [ERROR] [org.gradle.BuildExceptionReporter] solution is to recompile the class from source, using an up-to-date compiler 
16:41:25.141 [ERROR] [org.gradle.BuildExceptionReporter] and without specifying any "-target" type options. The consequence of ignoring 
16:41:25.141 [ERROR] [org.gradle.BuildExceptionReporter] this warning is that reflective operations on this class will incorrectly 
16:41:25.141 [ERROR] [org.gradle.BuildExceptionReporter] indicate that it is *not* an inner class. 
16:41:25.141 [ERROR] [org.gradle.BuildExceptionReporter] warning: Ignoring InnerClasses attribute for an anonymous inner class 
16:41:25.142 [ERROR] [org.gradle.BuildExceptionReporter] (org.apache.xmlbeans.XmlSimpleList$2) that doesn't come with an 
16:41:25.142 [ERROR] [org.gradle.BuildExceptionReporter] associated EnclosingMethod attribute. This class was probably produced by a 
16:41:25.142 [ERROR] [org.gradle.BuildExceptionReporter] compiler that did not target the modern .class file format. The recommended 
16:41:25.142 [ERROR] [org.gradle.BuildExceptionReporter] solution is to recompile the class from source, using an up-to-date compiler 
16:41:25.143 [ERROR] [org.gradle.BuildExceptionReporter] and without specifying any "-target" type options. The consequence of ignoring 
16:41:25.143 [ERROR] [org.gradle.BuildExceptionReporter] this warning is that reflective operations on this class will incorrectly 
16:41:25.143 [ERROR] [org.gradle.BuildExceptionReporter] indicate that it is *not* an inner class. 
... 

ich gelesen, dass ich brauchte diese hinzufügen zu ignorieren Warnung aber ich bekomme einen anderen Fehler auf compileSdkVersion

lintOptions { 
    abortOnError false 
} 

und hier ist mein build.gradle Datei:

buildscript { 
    repositories { 
     jcenter() 
    } 

    dependencies { 
     classpath 'org.javafxports:jfxmobile-plugin:1.0.0-b8' 
    } 
} 

apply plugin: 'org.javafxports.jfxmobile' 

mainClassName = "JavaFXStage" 
version = '1.0' 

repositories { 
    jcenter() 
} 

jfxmobile { 
    ios { 
     forceLinkClasses = ['ensemble.**.*'] 
    } 

    android { 

     javafxportsVersion = '8u40-b5' 
     compileSdkVersion = 23  
     applicationPackage = 'any.package.name' 

    } 
} 

dependencies{ 
    def poiVersion = "3.10.1" 
    compile "org.apache.poi:poi:${poiVersion}" 
    compile "org.apache.poi:poi-ooxml:${poiVersion}" 
    compile "org.apache.poi:ooxml-schemas:1.1" 
    compile "org.apache.xmlbeans:xmlbeans:2.6.0" 
} 

Wenn Sie weitere Informationen über das Projekt benötigen, zögern Sie nicht Fragen.

Wenn Sie irgendwelche Tipps haben, um mein Problem zu lösen, danke.

Thomas

+0

Es scheint xmlbeans ist veraltet (zuletzt aktualisiert 2012, veraltet erklärt 2014). Warum benutzt du es immer noch? Können Sie Ihr Projekt ohne es kompilieren? – Itai

+0

Ich kompiliere es ohne xmlbeans und ich habe immer noch den gleichen Fehler. – Thomas

+0

Das Fehlerprotokoll, das Sie anfügen, bezieht sich speziell auf xmlbeans. Was ist das neue Fehlerprotokoll? – Itai

Antwort

2

Verwendung von Apache POI auf Android nicht aus der Box zu einer Reihe von Einschränkungen aufgrund nicht funktioniert. Einer davon ist die Tatsache, dass das xmlbeans-jar mehrere Klassen enthält, was den Android-Compiler verwirrt. Es gibt auch Probleme mit dem Code von pacakge javax und die Größe des Codes.

Es gibt derzeit zwei Projekte, die versuchen, dieses Problem zu lösen:

Beide versuchen, dies zu lösen, indem sie wieder Verpacken der Klassen in eine kompaktere JAR-Datei, die dann zu einer Android-Anwendung hinzugefügt werden kann. Android5xlsx basiert auf POI 3.12 aktuell, poi-on-android auf 3.15-beta1 und kann relativ leicht gegen neuere Versionen von POI neu gebaut werden.

+0

Ich habe den zweiten Link, weil auf Ihrem Projekt verwenden Sie fussel Option, um das Problem zu lösen, und ich kann nicht wie ich schon sagte, und jetzt ich die App auf meinem Gerät installieren, aber ich Erhalte einen schwarzen Bildschirm, wenn ich versuche, die App zu starten. Ich werde in der Log-Datei graben. – Thomas

0

löste ich den Fehler im Schritt Dex von XMLBeans im gradle.build ausgenommen:

compile 'org.apache.poi:poi:3.16' 
compile ('org.apache.poi:poi-ooxml:3.16') { 
    exclude group: 'org.apache.xmlbeans', module: 'xmlbeans' 
} 

In meinem Java-Code, den ich nicht XMLBeans aber andere Parser benutzt haben. Hier ist meine Importliste:

import org.apache.poi.hssf.usermodel.HSSFCell; 
import org.apache.poi.hssf.usermodel.HSSFRow; 
import org.apache.poi.hssf.usermodel.HSSFSheet; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 

import org.apache.poi.xssf.usermodel.XSSFCell; 
import org.apache.poi.xssf.usermodel.XSSFRow; 
import org.apache.poi.xssf.usermodel.XSSFSheet; 
import org.apache.poi.xssf.usermodel.XSSFWorkbook; 

import javax.xml.parsers.DocumentBuilderFactory; 
import javax.xml.parsers.ParserConfigurationException; 
import javax.xml.parsers.DocumentBuilder; 
import org.w3c.dom.Document; 
import org.w3c.dom.NodeList; 
import org.xml.sax.SAXException; 
import org.w3c.dom.Node; 
import org.w3c.dom.Element; 
import java.util.zip.ZipEntry; 
import java.util.zip.ZipInputStream;