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)
根据我的研究,这与 Jackson 1.3 中引入的二进制不兼容有关。正如 Tatu Saloranta 在他的旧博客中所述,遗憾的是,该博客已不再在线。
我一直非常重视兼容性,至少对于任何“非 beta”版本(1.0 及更高版本)而言。因此,我们的想法是任何 1.x 版本都将比以前的版本简单的即插即用。这确实适用于补丁版本;但事实证明,并非所有次要版本都以这种方式工作。例如,版本 1.2 和 1.3 有一些意想不到的不兼容性。
问题是这样的:虽然大多数情况下二进制兼容性是比源代码兼容性更难的目标——也就是说,如果你破坏源代码兼容性,你几乎肯定会破坏二进制兼容性——但严格来说并非如此。具体来说,很可能进行某些源兼容但不兼容二进制的更改。
具体的例子是将不返回任何内容的方法(“void 方法”)更改为返回不破坏编译的方法。但它确实破坏了二进制兼容性。啊。
这正是当我决定让 ObjectMapper 遵循“流利”模式以允许链接配置方法调用时发生的事情。如果不是这种“隐藏”的 API 更改,那就太好了……
不太确定如何纠正这个问题,因为我对 android 开发还很陌生。
正如您在我的依赖项列表中看到的那样,我已经确保全面使用相同版本的 Jackson 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 Schema first”,但可以使用 JAXB bean)
该项目的 github 页面上也报告了此问题,但没有找到真正的解决方案。-- github.com/FasterXML/jackson-dataformat-xml/issues/116
更新:我使用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)
希望有人能对此有所了解,不知道是什么原因造成的......