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 が彼の古いブログで述べているように、残念ながらオンラインではありません。
少なくとも「非ベータ」リリース (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 スキーマ優先」はサポートされていませんが、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')
また、すべての依存関係を最新バージョンと myappcompat
およびsupport
api にアップグレードしました。
エラーが続く -
java.lang.VerifyError: cb/com/fasterxml/jackson/dataformat/xml/XmlFactory
at cb.com.fasterxml.jackson.dataformat.xml.XmlMapper.<init>(XmlMapper.java:49)
うまくいけば、誰かがこれに光を当てることができますが、何が原因なのかわかりません...