我正在尝试将一个普通的Java应用程序库转换为Android可用。该库来自于Java 1.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
开发环境是Terminal-IDE。(Google代码站点在这里。)
我正在运行最新的Terminal-IDE v 2.02。我的Android版本是:
Android 4.0.3
Software version 2.14.531.3 71ORD
(the rest aren't likely pertinent, but more on request)
编辑 - 新信息
由于在 Terminal-IDE 环境中缺少某些东西,我尝试在运行 Eclipse 的 Windows 7 机器上运行 dx。Eclipse 以某种方式正在运行 DX,因为它将代码从普通的 .jar 转换为作为 Android 应用程序的一部分实际运行的内容。然而,我无法从命令行中运行 dx - 它抱怨找不到源输入文件!(有任何线索吗?)
与此同时,有人建议我在 Terminal-IDE 环境中完成整个构建。这意味着要进行一些简化场景的黑客攻击,并且还经常出现找不到 java.RMI 的错误,因此我注释掉了那些部分 - 我假设有一个可供我指向的 Android-Ready 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