Android Studio 2.2.2
Compile SDK Android 7.1.1
Build Tools: 25.0.0
Gradle version: 2.14.1
Min SDK: 19
Target SDK: 25在尝试执行以下操作时,我遇到了jackson-dataformat-xml-2.8.5.jar的问题:
JacksonXmlModule module = new JacksonXmlModule();
ObjectMapper xmlMapper = new XmlMapper(); //This line引发以下异常
E/AndroidRuntime: FATAL EXCEPTION: Thread-418
Process: cb.myAppName, PID: 29744
java.lang.VerifyError: com/fasterxml/jackson/dataformat/xml/XmlFactory
at com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:49)
at cb.myAppName.Core.GenerateReturnXMLFile(Core.java:863)
at cb.myAppName.RouteScreenActivity$4.run(RouteScreenActivity.java:305)
at java.lang.Thread.run(Thread.java:841)据我所研究,这与杰克逊1.3中引入的二进制不兼容有关。正如塔图·萨罗兰塔在他的旧博客中所说的那样,可悲的是,它已经不再在线了。
我一直非常重视兼容性,至少对于任何“非beta”版本(1.0和更高版本)都是如此。因此,我们的想法是,任何1.x版本都是简单的即插即用。这确实适用于补丁版本;但事实证明,并不是所有次要版本都是这样工作的。例如,1.2和1.3版本有一些意想不到的不兼容性。 问题是:尽管最常见的二进制兼容性比源代码兼容性更难实现--也就是说,如果破坏源代码兼容性,几乎可以保证破坏二进制兼容性--但严格来说并不是这样。具体来说,很有可能进行某些源代码兼容的更改,但这些更改并不是二进制兼容的。 具体的例子是将不返回任何内容的方法("void“)更改为返回不中断编译的方法。但它实际上破坏了二进制兼容性。啊啊。 这正是我决定让ObjectMapper遵循"fluent“模式,允许对配置方法调用进行链接时所发生的事情。如果不是这个“隐藏的”API改变的话,那就太好了.
不过,我不太清楚该如何纠正这个问题,因为我对android的开发还很陌生。
我已经确保全面使用杰克逊的相同版本,正如您在我的app/build.gradle依赖项列表中所看到的那样,还有什么可能是我遗漏的吗?
dependencies {
compile fileTree(include: ['*.jar'], exclude: ['com.symbol.emdk.jar'], dir: 'libs')
compile files('../libs/json-20151123.jar')
provided files('../libs/com.symbol.emdk.jar')
compile files('../libs/slf4j-api-1.7.6.jar')
compile files('../libs/logback-android-1.1.1-4.jar')
compile files('../libs/sun.misc.BASE64Decoder.jar')
compile files('../libs/ZSDK_ANDROID_API.jar')
compile 'com.android.support:appcompat-v7:22.2.1'
compile 'com.android.support:support-v7:22.2.0'
compile 'com.google.code.ksoap2-android:ksoap2-android:3.6.0'
compile 'com.google.code.gson:gson:2.4'
compile 'org.apache.directory.studio:org.apache.commons.io:2.4'
compile 'org.joda:joda-money:0.11'
compile 'org.apache.directory.studio:org.apache.commons.lang:2.6'
compile 'com.google.android.gms:play-services-appindexing:9.8.0'
compile 'org.greenrobot:eventbus:3.0.0'
compile 'com.fasterxml.jackson.core:jackson-core:2.8.5'
compile 'com.fasterxml.jackson.core:jackson-databind:2.8.5'
compile 'com.fasterxml.jackson.datatype:jackson-datatype-joda:2.8.5'
compile 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.8.5'
compile 'com.github.gcacace:signature-pad:1.2.0'
}根据官方的FasterXML Jackson github页面,我使用的扩展应该被支持.
XML:支持XML;提供流和数据库实现。类似于JAXB的“代码优先”模式(不支持"XML优先“,但可以使用JAXB) https://github.com/FasterXML/jackson-dataformat-xml
该项目的github页面也报告了这一问题,但没有找到真正的解决办法。-- github.com/FasterXML/jackson-dataformat-xml/issues/116
UPDATE:我对以下依赖项使用了jarjar:
compile files('../libs/cb-joda-time-2.9.6.jar')
compile files('../libs/cb-joda-money-0.12.jar')
compile files('../libs/cb-jackson-dataformat-xml-2.8.5.jar')
compile files('../libs/cb-jackson-datatype-joda-2.8.5.jar')
compile files('../libs/cb-java-json-0.13.0.jar')
compile files('../libs/cb-json-20160212.jar')还将每个依赖项升级到最新版本,以及我的appcompat和support api。
错误还在继续-
java.lang.VerifyError: cb/com/fasterxml/jackson/dataformat/xml/XmlFactory
at cb.com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:49)希望有人能照亮这件事,不知道是什么导致了这一切.
发布于 2016-12-05 13:47:00
经过用户啊哈的一些研究和提示,我能够进一步确定如何纠正这一问题。我没有时间对它进行测试,因为我最终选择了不同的路径,转而使用了SimpleXML库,这对我需要做的工作非常有用。
当我进行测试时,我将用更多的细节更新这个答案,但是下面是一些尝试和纠正这个问题的方法:
Stax作为依赖项包括在内:github.com/FasterXML/jackson-dataformat-xml#android-quirksgradle dependencies。然后,Gradle将显示用于编译和打包应用程序的实际依赖树。生成的依赖树可能与您声明的依赖项不同,例如,由于传递依赖关系。-Thanks 啊哈这是github:github.com/FasterXML/jackson-dataformat-xml/issues/116的原始问题
https://stackoverflow.com/questions/40769450
复制相似问题