Android核心库错误

Posted

技术标签:

【中文标题】Android核心库错误【英文标题】:Android core library error 【发布时间】:2010-10-24 18:38:46 【问题描述】:

当我包含 jaxp.jar 时,我收到以下错误-

trouble processing "javax/xml/XMLConstants.class":
[2009-05-08 16:53:18 - TestProject] 
Attempt to include a core VM class in something other than a core library.
It is likely that you have attempted to include the core library from a desktop
virtual machine into an application, which will most assuredly not work. If
you really intend to build a core library -- which is only appropriate as
part of creating a full virtual machine binary, as opposed to compiling an
application -- then use the "--core-library" option to suppress this error
message. If you go ahead and use "--core-library" but are in fact building
an application, then please be aware that your build will still fail at some
point; you will simply be denied the pleasure of reading this helpful error
message.
[2009-05-08 16:53:18 - TestProject] 1 error; aborting
[2009-05-08 16:53:18 - TestProject] Conversion to Dalvik format failed with error 1

有人遇到过这个问题吗?任何帮助将不胜感激我已经提出了一些解决方案,但它们并不具体。

【问题讨论】:

您是否在使用任何第三方 JAR 文件? 是的,SchemaFactory 类和 Validator 类在那个 jar 中可用 我得到了同样的错误,我想做的只是简单地构建这个:developer.android.com/guide/tutorials/views/hello-webview.html 按照信中的指示。 :( 你在这个项目中使用 maven 吗? 【参考方案1】:

您从 Dx 获得的错误仅基于您正在导入的库的 java 包名称,而不是其他任何内容。

消息可以概括为:如果您在 java.*javax.* 命名空间中导入库,它很可能依赖于仅作为 JDK 的一部分提供的其他“核心”库,因此在 Android 平台上不可用。它本质上是在防止您做一些愚蠢的事情,当您看到该消息时,这在 99% 的情况下都是准确的。

现在,当然,仅仅因为 java 包以 java.*javax.* 开头并不一定意味着它依赖于适当的 JDK。它可能在android中工作得很好。要绕过愚蠢检查,请将 --core-library 选项添加到 dx.将$ANDROID_HOME/platform-tools/dx的最后一行改成,

exec java $javaOpts -jar "$jarpath" "$@"

到,

exec java $javaOpts -jar "$jarpath" --core-library "$@"

在我的例子中,我包含了一个依赖于 Jackson 的库,它依赖于 JAXB。对我来说,重写愚蠢检查是可以接受的,因为该库对 Jackson 的使用仅用于 JSON 而不是用于 XML 序列化(我只包括 JAXB API 库,而不是 impl)。当然我希望有一种更简洁的方法来解决这个问题,但是重写***库以避免使用 Jackson 不是一种选择。

【讨论】:

就我而言,$ANDROID_HOME/platform-tools/ 中没有 dx 文件,尽管我在 $ANDROID_HOME/build-tools/21.1.2/ 中找到了它。在那里我按照你的建议改变了它,但得到了同样的错误。有什么帮助吗? 您的构建指向哪些构建工具? 我正在使用 buld tools v21.1.2 作为上述评论中显示的文件夹路径。 尝试在您修改的 dx 中添加一个回显,以确保这是您构建时正在执行的那个。 感谢您的建议。我将 echo 放入我的 sdk dx 文件(如 echo "Mohammad started 21.1.2\n" >> ~/Desktop/buildDX )中可用的所有构建工具中,但令人惊讶的是,桌面上没有生成 buildDX 文件,并且错误仍然存​​在。无法弄清楚发生了什么。 :(【参考方案2】:

我看到了两种可能性:

在您的项目文件夹中,文件.classpath 可能是错误的。尝试将其替换为:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="gen"/>
<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/>
<classpathentry kind="output" path="bin"/>
</classpath>

如果不起作用,则表示您尝试包含的库与 Android 不兼容。

【讨论】:

当我遇到以下错误时,这对我有用:trouble processing java/nio/CharBuffer.class【参考方案3】:

如果你包含一个核心类,那么这个错误是不言自明的。如果你不是(搜索你的代码,只是为了确保),那么我只是在使用 Eclipse 时不时看到这个错误,当 Android“库”被意外多次添加到 Eclipse 构建路径时。

我不知道它是如何进入那种状态的,但它已经发生在我身上两次了。要解决它,您需要修复 Nicolas 指出的 .classpath 文件。另一种方法是编辑“Java 构建路径”(右键单击项目并选择属性)并删除您的 Android* 库(如果有多个将它们全部删除)。

这将导致项目无法编译并出现许多错误,但是,一旦你确定你已经摆脱了所有的库,你可以再次右键单击项目并选择“Android工具”->“修复项目”属性”和 Android.jar 的正确(单个副本)将被添加回来,一切应该从那里再次正常工作。

【讨论】:

顺便说一句,我在 IntelliJ IDEA 加载项目时遇到了同样的问题。为了解决这个问题,我删除了所有方面,重建了项目,然后将 Android 方面添加回 Android 目标模块。 感谢您的解决方案。我一直在阅读所有解决方案,似乎没有一个对我有用。从构建路径中删除 android.jar 文件并使用“Android 工具 -> 修复项目属性”解决了问题。 根据我的解释,所有的解决方案最终都归结为 .classpath 文件的变化。 Android 工具 -> 修复项目属性并在构建路径中编辑库【参考方案4】:

我在将一个 Android 项目复制粘贴到同一个工作区后得到了这个。之后从磁盘中删除它是不够的,因为 Eclipse 仍然隐藏了一些对它的引用。我还必须删除工作区文件夹下的以下文件夹:

.metadata\.plugins\org.eclipse.core.resources.projects[NameOfTheDuplicateProject]

【讨论】:

【参考方案5】:

我不包括核心类或构建核心库或任何其他。

是的,你是:

处理“javax/xml/XMLConstants.class”的问题

java.* 和 javax.* 都算。如果您只想在测试应用程序中忽略它,您可以使用 --core-library 开关,但请注意警告:“您的应用程序在某些时候仍将无法构建或运行。请为那些发现的愤怒客户做好准备,例如,一旦他们升级操作系统,您的应用程序就会停止运行。这个问题应该归咎于您。”

正如它所说,对于运输应用程序,正确的解决方法是重新打包这些类(即将它们移动到新目录,相应地编辑它们的“包”行,并更新调用者中的“导入”行)。

【讨论】:

我也遇到过这个问题,只是从无用的错误消息中引用有问题的文件是非常无用的。这实际上是在没有尝试构建核心库的情况下发生的问题。查看 Nicolas Raoul 和 Charlie Collins 的答案,看看有什么帮助。

以上是关于Android核心库错误的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 逆向通用工具开发 ( 静态库项目中的网络操作核心类 CNetwork 分析 )

为啥在构建 Android 11 时出现非法指令(核心转储)错误?

Android:错误包括/重新打包引用 javax 核心类的依赖项

android系统 主要有哪几部分?

迁移到 Android Studio 后,我收到“不明智或错误地使用核心类”错误

Android 相当于核心聚光灯