当前位置:  开发笔记 > 编程语言 > 正文

在android中集成org.apache.poi和javax.xml.stream.*包(stax-api) - 如何在Android Studio中设置--core-library参数?

如何解决《在android中集成org.apache.poi和javax.xml.stream.*包(stax-api)-如何在AndroidStudio中设置--core-library参数?》经验,为你挑选了0个好方法。

我正在使用Android studio 1.5.1

我想在我的android项目中包含org.apache.poi-ooxml库.要包含该库,我需要包含一些其他库依赖项,其中包括stax-api库.

stax api的问题在于它拥有javax中的所有包.*这是一个"核心库".Java jdk包含了所有这些库,所以如果我在Java SE中使用它,我就不需要那个stax-api库.另一方面,Android有一个"部分"stax-api库.对于android我只需要javax.xml.stream.*包.这意味着我需要提取stax-api,删除除javax.xml.stram包之外的所有内容,然后重新打包它.

所以我想在Android中使用这个修改过的库是安全的.但是,它有javax.*包,根据Android studio是一个核心库,所以Android Studio(或Android Studio中的任何组件)给我一个警告:

处理"javax/xml/stream/EventFilter.class"时遇到问题:

在不构建核心库时,不明智或错误地使用核心类(java.*或javax.*).

这通常是由于在使用IDE(例如Eclipse)时无意中在应用程序的项目中包含了核心库文件.如果你确定你不是故意定义一个核心类,那么这就是最可能的解释.

但是,您实际上可能正在尝试在核心命名空间中定义一个类,例如,您可能已从非Android虚拟机项目中获取该类.这肯定是行不通的.它至少会危害您的应用与该平台的未来版本的兼容性.它的合法性通常也是有问题的.

如果您真的打算构建一个核心库 - 它只适合作为创建完整虚拟机分发的一部分,而不是编译应用程序 - 那么使用"--core-library"选项来抑制此错误消息.

如果你继续使用"--core-library"但实际上正在构建一个应用程序,那么预先警告你的应用程序仍然无法构建或运行,在某些时候.请为愤怒的客户做好准备,例如,一旦升级操作系统,您的应用程序就会停止运行.你应该为这个问题负责.

如果您合法地使用恰好位于核心软件包中的某些代码,那么最简单的安全替代方法是重新打包该代码.也就是说,将有问题的类移动到您自己的包命名空间中.这意味着它们永远不会与核心系统类冲突.JarJar是一个可以帮助您完成这项工作的工具.如果你发现你不能做到这一点,那就表明你所走的道路最终会导致痛苦,痛苦,悲伤和悲伤.

所以,我想使用这个--core-library选项.但是在哪里设置呢?

我已经看过Android Studio忽略--core-library标志,这对我没有帮助.我认为这些答案已经过时,这就是为什么我要问一个新问题.

我做了什么尝试:

    的build.gradle:

    dexOptions {
      coreLibrary true;
    }
    

    的build.gradle:

    dexOptions {
      preDexLibraries = false
    }
    
    project.tasks.withType(com.android.build.gradle.tasks.Dex) {
      additionalParameters=['--core-library']
    }
    

    文件 - >其他设置 - >默认设置 - >编译器 - > Android编译器并检查'添加 - 核心库标志'

这些都没有奏效.有没有办法设置该选项?


编辑:为什么我需要STAX: 我正在做一些与Workbook,Sheet,Columns,Cells for .xlsx文件的东西.当我只包括poi-ooxml-3.14-beta1-20151223.jar 我在构建时间中得到一个错误说class file for org.apache.poi.ss.usermodel.Workbook not found.

在运行时包含poi-3.14-beta1-20151223.jar后,我得到了Could not find method org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorkbook.isSetBookViews, referenced from method org.apache.poi.xssf.usermodel.XSSFWorkbook.

在包括poi-ooxml-schemas-3.14-beta1-20151223.jar运行过程中出现了,等等,Failed resolving Lorg/openxmlformats/schemas/spreadsheetml/x2006/main/CTWorkbook; interface 59 'Lorg/apache/xmlbeans/XmlObject;java.lang.VerifyError: org/apache/poi/xssf/usermodel/XSSFWorkbook

在包括xmlbeans-2.6.0.jar运行过程中出现了,等等,Could not find method javax.xml.stream.events.Namespace.getPrefix, referenced from method org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.getQNamejava.lang.NoClassDefFoundError: javax.xml.stream.XMLEventFactory at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.(PackagePropertiesMarshaller.java:41)

更新 所以,来自http://poi.apache.org/faq.html#faq-N1017E

18.为什么我得到一个java.lang.NoClassDefFoundError:javax/xml/stream/XMLEventFactory.newFactory()

此错误表示类XMLEventFactory未提供POI所依赖的功能.这可能有很多不同的原因:

过时的xml-apis.jar,stax-apis.jar或xercesImpl.jar:

Java 5及更低版本需要这些库,但实际上并不需要符合规范的Java 6实现,因此请尝试从类路径中删除这些库.如果无法做到这一点,请尝试升级到这些jar文件的较新版本.

运行IBM Java 6(可能作为WebSphere Application Server的一部分):IBM Java 6不提供XML标准所需的所有接口,只有IBM Java 7似乎提供了正确的接口,因此请尝试升级JDK.

具有过时补丁级别的Sun/Oracle Java 6:某些接口仅在Java 6的某些补丁级别中包含/修复.尝试使用最新的可用补丁级别运行,或者甚至更好地使用Java 7/8,其中所有功能都应该可用案例.

所以,如果我正确地读到这个,在Android中,我确实需要一个"截断的"STAX API.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有