Android System.loadLibrary在加载本机库时停止

时间:2011-12-19 14:23:56

标签: java android-ndk shared-libraries

我有一个相当大的共享库文件(= 12兆字节),它不包含任何JNI代码。

调用System.loadLibrary("some_file")时,方法永不返回,并且不会生成相关输出。此外,Windows Taskmanager报告模拟器实例没有占用所有CPU功率。

我有一个包含以下代码的类:

static 
{
    System.out.println("Trying");
    System.loadLibrary("some_file");
    System.out.println("Works");
}

以下是LogCat提供的输出:

I/System.out(534): Trying
D/dalvikvm(534): Trying to load lib /data/data/app/lib/libsome_file.so 0x40643c20

如果我上传使用库libsome_file.so的本机测试应用程序并从模拟器shell运行它,则应用程序可以正常工作。

是否有任何方法可以调试System.loadLibrary正在做什么,或者是否有人提示为什么System.loadLibrary可能永远不会返回?

2 个答案:

答案 0 :(得分:1)

我自己找到了问题的解决方案。我没有使用任何其他调试工具,但遗漏了一些在加载库时运行的代码。特定代码被绞死,使System.loadLibrary也挂起。

答案 1 :(得分:1)

添加我的解决方案以防其他人遇到问题。问题出在我们的库中静态加载的一些外部依赖项(OpenSceneGraph)。他们只挂在Android 4.0上,运行良好4.2及以上。

因此,如果遇到问题,请将__android_log_print放在库的JNI_onLoad中(如果有的话)。如果没有调用它,请检查所有可以静态调用的函数(注意,有些可能隐藏在宏后面)并尝试删除它们以查看是否能够加载库。