我有一个相当大的共享库文件(= 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可能永远不会返回?
答案 0 :(得分:1)
我自己找到了问题的解决方案。我没有使用任何其他调试工具,但遗漏了一些在加载库时运行的代码。特定代码被绞死,使System.loadLibrary也挂起。
答案 1 :(得分:1)
添加我的解决方案以防其他人遇到问题。问题出在我们的库中静态加载的一些外部依赖项(OpenSceneGraph)。他们只挂在Android 4.0上,运行良好4.2及以上。
因此,如果遇到问题,请将__android_log_print放在库的JNI_onLoad中(如果有的话)。如果没有调用它,请检查所有可以静态调用的函数(注意,有些可能隐藏在宏后面)并尝试删除它们以查看是否能够加载库。