在不构建核心库时,不明智或错误地使用核心类(java。*或javax。*)

时间:2011-10-05 12:51:12

标签: dalvik

当我清理项目时,我收到以下错误:

[2011-10-05 13:47:53 - The Basics] Dx 
trouble processing "java/nio/CharBuffer.class":

Ill-advised or mistaken usage of a core class (java.* or javax.*)
when not building a core library.

这通常是由于无意中包含核心库文件 在您的应用程序的项目中,使用IDE(例如 日食)。如果你确定你不是故意定义一个 核心类,那么这就是最可能的解释 继续。

但是,您实际上可能正在尝试在核心中定义类 命名空间,例如,您可能采用的来源 来自非Android虚拟机项目。这将是最多的 肯定不行。它至少会危害它 您的应用与该平台的未来版本的兼容性。 它的合法性通常也是有问题的。

如果你真的打算建立一个核心库 - 这只是 适合作为创建完整虚拟机的一部分 分发,而不是编译应用程序 - 然后使用 “--core-library”选项可以禁止显示此错误消息。

如果您继续使用“--core-library”,但事实上 构建应用程序,然后预先警告您的应用程序 在某些时候仍然无法建立或运行。请 为愤怒的顾客做好准备,例如找到你的 应用程序在升级其运行后停止运行 系统。你应该为这个问题负责。

如果您合法地使用了恰好位于的某些代码 核心包,那么你最简单的安全选择就是 重新包装那段代码。也就是说,将有问题的类移到 你自己的包命名空间。这意味着他们永远不会进入 与核心系统类冲突。 JarJar是一个可能有用的工具 你在这努力。如果你发现你不能这样做,那么 这表明你所处的道路最终将成为现实 导致痛苦,痛苦,悲伤和悲伤。

[2011-10-05 13:47:53 - The Basics] Dx 1 error; aborting
[2011-10-05 13:47:53 - The Basics] Conversion to Dalvik format failed with error 1

4 个答案:

答案 0 :(得分:4)

我有这个问题。我使用Maven来构建我的android项目。我的问题是由我的依赖项之一取决于android jar。我更新了我的pom以从那个依赖项中排除android,并为我解决了这个问题。

  <dependency>
        <groupId>org.reassembler</groupId>
        <artifactId>synth-android</artifactId>
        <version>2.5.8</version>
        <exclusions>
            <exclusion>
                <artifactId>junit</artifactId>
                <groupId>junit</groupId>
            </exclusion>
            <exclusion>
                <artifactId>android</artifactId>
                <groupId>android</groupId>
            </exclusion>
        </exclusions>
    </dependency>

希望这对某人有所帮助,我花了一段时间才弄明白发生了什么。

答案 1 :(得分:2)

为了任何可能偶然发现这一点的人的利益,这个问题可能是因为包含了android.jar这样的旧库。从构建路径中删除.jar文件将允许您进行编译。否则,您可以使用&#34; jarjar&#34;在错误消息中提到将.jar文件移动到另一个包。

答案 2 :(得分:1)

您的IDE配置错误。确保您的脚本或IDE未将rt.jarandroid.jar传递给dx

答案 3 :(得分:0)

在Android Studio中,我在我的lib文件夹中包含了java和javax jar文件,并且存在与它们相关的依赖项(在应用程序级别的build.gradle中)。我把它们评论出来了。

//compile files('libs/  K  java-rt-jar-stubs-1.5.0.jar')
//compile 'javax.annotation:jsr250-api:1.0'
//compile files('libs/javax. annotation.jar')

然后我去了项目视图并删除了jar文件。有一些java.awt.geom的遗留实例,我不得不清除,但重建项目然后我很好。