3

我正在尝试转换一个普通的 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。(谷歌代码网站在这里。

我正在运行 Terminal-IDE v 2.02 - 最新的。我的安卓版本是:

Android 4.0.3
Software version 2.14.531.3 71ORD
(the rest aren't likely pertinent, but more on request)

编辑 - 新信息

考虑到终端 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
4

2 回答 2

3

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

于 2013-04-09T01:50:49.000 回答
0

我对com.htc.profileflag.ProfileConfig.<clinit>您的堆栈跟踪中的条目非常怀疑。我怀疑您设备上的环境可能与终端 ide 所期望的略有不同,并且它没有包含适用于 HTC 特定事物的正确 jni 库。

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

于 2013-04-09T02:01:30.490 回答