java dx实用程序:意外的顶级错误java.lang.ExceptionInInitializeError

java dx实用程序:意外的顶级错误java.lang.ExceptionInInitializeError,java,android,ide,dx,terminal-ide,Java,Android,Ide,Dx,Terminal Ide,我正在尝试转换一个普通的Java应用程序库,以便在Android上使用。该库可以追溯到Java1.1,一直以来都在维护、改进等,并在其他平台上使用,因此不太可能涉及到源代码 通常,由于部署的细节,这个库不是封装在jar中,而是保存在一个树中,CLASSPATH发挥了它的魔力。然而,为了把它放在Android上,创建了一个jar。一切顺利-没有警告或错误 由于将有一些新的开发——因此调试——跳过了通过ProGuard进行处理的步骤——时间将在稍后到来 错误出现在下一步,运行dx将其转换为Andro

我正在尝试转换一个普通的Java应用程序库,以便在Android上使用。该库可以追溯到Java1.1,一直以来都在维护、改进等,并在其他平台上使用,因此不太可能涉及到源代码

通常,由于部署的细节,这个库不是封装在jar中,而是保存在一个树中,CLASSPATH发挥了它的魔力。然而,为了把它放在Android上,创建了一个jar。一切顺利-没有警告或错误

由于将有一些新的开发——因此调试——跳过了通过ProGuard进行处理的步骤——时间将在稍后到来

错误出现在下一步,运行dx将其转换为Android使用。在这里描述的致命错误发生之前,处理将一直进行,不会出错。(有一个小警告。)

错误提示:

UNEXPECTED TOP-LEVEL ERROR:
java.lang.ExceptionInInitializerError
        at java.io.ByteArrayOutputStream.expand(ByteArrayOutputStream.java:91)
        at java.io.ByteArrayOutputStream.write(ByteArrayOutputStream.java:201)
        at com.android.dx.cf.direct.ClassPathOpener.processArchive(ClassPathOpener.java:244)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:136)
        at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:113)
        at com.android.dx.command.dexer.Main.processOne(Main.java:247)
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:183)
        at com.android.dx.command.dexer.Main.run(Main.java:139)
        at com.android.dx.command.dexer.Main.main(Main.java:120)
        at com.android.dx.command.Main.main(Main.java:89)
        at com.spartacusrex.spartacuside.external.dx.main(dx.java:14)
        at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.UnsatisfiedLinkError: native_get
        at android.os.SystemProperties.native_get(Native Method)
        at android.os.SystemProperties.get(SystemProperties.java:47)
        at com.htc.profileflag.ProfileConfig.<clinit>(ProfileConfig.java:168)
        ... 12 more
编辑-新信息

考虑到终端IDE环境中缺少了一些东西,我开始尝试在运行Eclipse的Windows7设备上运行dx。Eclipse以某种方式运行DX,将代码从一个普通的.jar转换为作为Android应用程序的一部分实际运行的东西。但是,我无法从命令行运行dx-它抱怨找不到源输入文件!(有什么线索吗?)

同时,在一些人的建议下,我开始在终端IDE环境中进行整个构建。这意味着需要进行一些黑客操作来简化场景,而且它一直无法找到java.RMI,因此我对这些部分进行了注释-我想我可以指出有一个支持Android的RMI库。。。继续,一切正常,直到我再次访问DX,出现了与上面报告的非常类似的错误:

UNEXPECTED TOP-LEVEL ERROR:
java.lang.ExceptionInInitializerError
        at com.android.dx.util.FileUtils.readFile(FileUtils.java:72)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:139)
        at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:196)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:127)
        at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:196)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:127)
        at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:113)
        at com.android.dx.command.dexer.Main.processOne(Main.java:247)
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:183)
        at com.android.dx.command.dexer.Main.run(Main.java:139)
        at com.android.dx.command.dexer.Main.main(Main.java:120)
        at com.android.dx.command.Main.main(Main.java:89)
        at com.spartacusrex.spartacuside.external.dx.main(dx.java:14)
        at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.UnsatisfiedLinkError: native_get
        at android.os.SystemProperties.native_get(Native Method)
        at android.os.SystemProperties.get(SystemProperties.java:47)
        at com.htc.profileflag.ProfileConfig.<clinit>(ProfileConfig.java:168)
        ... 14 more
意外的顶级错误:
java.lang.ExceptionInInitializeError
位于com.android.dx.util.FileUtils.readFile(FileUtils.java:72)
位于com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:139)
位于com.android.dx.cf.direct.ClassPathPener.processDirectory(classPathPener.java:196)
位于com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:127)
位于com.android.dx.cf.direct.ClassPathPener.processDirectory(classPathPener.java:196)
位于com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:127)
位于com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:113)
位于com.android.dx.command.dexer.Main.processOne(Main.java:247)
位于com.android.dx.command.dexer.Main.processAllFiles(Main.java:183)
位于com.android.dx.command.dexer.Main.run(Main.java:139)
位于com.android.dx.command.dexer.Main.Main(Main.java:120)
位于com.android.dx.command.Main.Main(Main.java:89)
位于com.spartacusrex.spartacuside.external.dx.main(dx.java:14)
在dalvik.system.NativeStart.main(本机方法)
原因:java.lang.UnsatifiedLinkError:native\u get
在android.os.SystemProperties.native\u get(native方法)上
位于android.os.SystemProperties.get(SystemProperties.java:47)
在com.htc.profileflag.ProfileConfig.(ProfileConfig.java:168)
... 14多

该错误意味着进行了JNI调用,但找不到它试图绑定的本机函数。看起来android.os.SystemProperties.get试图调用名为native_get的本机库函数来实际执行一些工作。项目中是否正确包含了库?

我对堆栈跟踪中的
com.htc.profileflag.ProfileConfig.
项表示怀疑。我怀疑您的设备上的环境可能与终端ide所期望的稍有不同,并且它没有包含适用于HTC特定内容的正确jni库


要检查这是否真的是一个特定于设备的问题,您可以尝试在模拟器中设置终端ide,看看在构建库时是否会出现相同的错误。

是的,正如Gabe指出的,这相对来说比较容易理解,至少可以知道失败的原因。运行类初始值设定项时,出现了一个不满意的链接错误,试图引用本机方法
native\u get
。这可能表明您的库路径有问题(因为这是您找到本机方法的地方)。“项目中是否正确包含了库?”…我将在这里断章取义地说,“可能没有!”-微笑-我注意到一些环境变量差异,值得更深入地研究。谢谢你的评论……当我仔细阅读你的评论时,也许我不清楚我是在构建图书馆本身。它只有标准的java依赖项(包括)。我所知道的唯一一个不存在的代码(java.rmi)我决定注释掉,因为rmi不是这段代码的关键部分。至少到目前为止,还没有一个环境变量的详细信息。您可能对我的环境与终端IDE的期望有所了解,但我不知道如何模拟构建!(我对Android相当陌生-我在仿真中运行过自己的应用程序,但构建环境?嗯…)它应该与在自己的设备上运行终端ide没有任何区别-您启动Android emulator,安装终端ide,复制项目并尝试构建,就像在你的设备上一样。昨天我花了几个小时试图在基于Windows-7的Eclipse开发环境中的android仿真器上安装终端ide;尽管我可能会尝试,但我找不到将应用程序安装到模拟器中的方法,该模拟器不是作为项目创建的。没有“安装”功能!我甚至用更新工具更新了安装-仍然没有乐趣。嗯?您可以使用adb在模拟器上安装应用程序,就像在设备上一样。
UNEXPECTED TOP-LEVEL ERROR:
java.lang.ExceptionInInitializerError
        at com.android.dx.util.FileUtils.readFile(FileUtils.java:72)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:139)
        at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:196)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:127)
        at com.android.dx.cf.direct.ClassPathOpener.processDirectory(ClassPathOpener.java:196)
        at com.android.dx.cf.direct.ClassPathOpener.processOne(ClassPathOpener.java:127)
        at com.android.dx.cf.direct.ClassPathOpener.process(ClassPathOpener.java:113)
        at com.android.dx.command.dexer.Main.processOne(Main.java:247)
        at com.android.dx.command.dexer.Main.processAllFiles(Main.java:183)
        at com.android.dx.command.dexer.Main.run(Main.java:139)
        at com.android.dx.command.dexer.Main.main(Main.java:120)
        at com.android.dx.command.Main.main(Main.java:89)
        at com.spartacusrex.spartacuside.external.dx.main(dx.java:14)
        at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.UnsatisfiedLinkError: native_get
        at android.os.SystemProperties.native_get(Native Method)
        at android.os.SystemProperties.get(SystemProperties.java:47)
        at com.htc.profileflag.ProfileConfig.<clinit>(ProfileConfig.java:168)
        ... 14 more