2016-07-17 1 views
1

Я пытаюсь использовать Apache POI на Android, чтобы сделать это, я создал проект градиента на eclipse, но когда я выполняю задачу градиента androidInstall, я получаю сообщение об ошибке во время шаг dex. (Выполнения задачи работает)Получение ошибки во время dex с помощью проекта с использованием javafx и apache POI

Здесь ошибка:

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. 
... 

Я читал, что мне нужно, чтобы добавить это игнорировать предупреждение, но я получаю другую ошибку на compileSdkVersion

lintOptions { 
    abortOnError false 
} 

и вот мой build.gradle файл:

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" 
} 

Если вам нужна дополнительная информация о проекте, просить.

Если у вас есть какие-либо советы по решению моей проблемы, спасибо.

Томас

+0

Появляется xmlbeans является устаревшим (последнее обновление 2012, объявлено устаревшим 2014). Почему вы все еще используете его? Можете ли вы скомпилировать свой проект без него? – Itai

+0

Я скомпилирую его без xmlbeans, и у меня все еще есть такая же ошибка. – Thomas

+0

Введенный вами журнал ошибок относится к xmlbeans. Что такое новый журнал ошибок? – Itai

ответ

2

Использование Apache POI на Android не работает из коробки из-за ряда ограничений. Среди одного из них - тот факт, что jml-бит содержит несколько классов несколько раз, что смущает компилятор Android. Также есть проблемы с кодом из pacakge javax и размером кода.

Есть в настоящее время два проекта, которые пытаются решить эту проблему:

Оба пытаются решить эту проблему путем повторной упаковки классов в более компактный файл jar, который затем можно добавить в приложение для Android. Android5xlsx основан на POI 3.12 в настоящее время poi-on-android на 3,15-бета1 и может быть легко перестроен против последних версий POI.

+0

Я использовал вторую ссылку, потому что в вашем проекте вы используете опцию lint для решения проблемы, и я наклоняюсь, как я уже говорил, и теперь мне удается установить приложение на свое устройство, но я получить черный экран, когда я пытаюсь запустить приложение. Я буду копать в файле журнала. – Thomas

0

я решил ошибку на этапе Dex пути исключения XMLBeans в gradle.build:

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

В моем Java коде, который я не использовал XMLBeans, но другие парсер. Вот мой список импорта:

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;