在 android Dx 中使用核心类时出现问题处理“javax/xml/bind/Binder.class”我确实需要 javax.xml.* 中的类来开发 Web 服务,但它在 Android 中并不完全支持。当我导入这些 jars 时,eclipse 中没有显示编译错误,但 DX 无法处理它。我在网上搜索后,据说可以使用--core-library或者使用jarjar重新打包。我还没有找到任何在 Eclipse 中添加 DX 选项的教程。感谢您提供解决此问题的任何帮助。
2 回答
您从 Dx 获得的错误仅基于您正在导入的库的 java 包名称,而不是其他任何内容。
该消息可以概括为:如果您在 java.* 或 javax.* 命名空间中导入库,它很可能依赖于仅作为 JDK 的一部分提供的其他“核心”库,因此不会可在安卓平台上使用。它本质上是在防止您做一些愚蠢的事情,当您看到该消息时,99% 的时间都是准确的。
现在,当然,仅仅因为 java 包以 java.* 或 javax.* 开头并不一定意味着它依赖于适当的 JDK。它可能在android中工作得很好。要绕过愚蠢检查,请将 --core-library 选项添加到 dx. 更改 from 的最后一行$ANDROID_HOME/platform-tools/dx
,
exec java $javaOpts -jar "$jarpath" "$@"
至,
exec java $javaOpts -jar "$jarpath" --core-library "$@"
就我而言,我包含了一个依赖于 JAXB 的 Jackson 库。对我来说,重写愚蠢检查是可以接受的,因为该库对 Jackson 的使用仅用于 JSON,而不用于 XML 序列化(我只包括 JAXB API 库,而不是 impl)。当然,我希望有一种更简洁的方法来解决这个问题,但是重写顶级库以避免使用 Jackson 不是一种选择。
这些类是针对与 android dalvik 不兼容的 jvm 编译的。您将需要获取源代码,而不是 jar,并将它们编译为为 android 编译的 jar 文件。