Android libmono.so中的JNI_OnLoad失败

时间:2012-09-06 11:11:34

标签: android linker java-native-interface xamarin.android

我的工作是android框架移植。

我得到了很多第3张APK无法在我的Android Jelly Bean上运行。 (所有这些都是libmono.so的链接器)

当它们运行时,它们在libmono.so中的JNI_OnLoad()函数中都失败了。 以下是我的错误日志和分析。

// 1。 Android dalvik vm native.cpp(dvmLoadNativeCode(){... dlopen()...})

**D/dalvikvm(2629): Added shared lib /data/data/pl.idreams.jellydefense/lib/libmono.so 0xaed3a578**

// 2。 Android链接器加载libmono.so并返回JNI_OnLoad函数地址 // Android dalvik vm native.cpp(dvmLoadNativeCode(){... dlsym(handle,“JNI_OnLoad”)...})

**D/linker(2629): TRACE:  1252 SEARCH JNI_OnLoad in libmono.so@0xa5cf9000 0467e784 86**
**D/linker(2629): TRACE:  1252 FOUND JNI_OnLoad in libmono.so (0000a3a4) 340**

// 3。 Android dalvik vm native.cpp(dvmLoadNativeCode(){.. version =(* func)(gDvmJni.jniVm,NULL); ..}) //执行JNI_OnLoad函数并返回JNI版本,libmono dump下面出现错误消息

**E/linker(2629): ERROR: OOPS:     0 cannot map library 'libmono.so'. no vspace available.**

// 4。 libmono返回JNI版本= 0

**W/dalvikvm(2629): JNI_OnLoad returned bad version (0) in /data/data/pl.idreams.jellydefense/lib/libmono.so 0xaed3a578**

有人可以告诉我为什么JNI_OnLoad在Libmono.so失败了吗?

JNI_OnLoad在Libmono.so中做了什么? (我会丢失一些模块或共享库吗?)

非常感谢, Chin ku

1 个答案:

答案 0 :(得分:1)

看起来你的应用程序试图分配太多内存而Android已经足够了。原因不一定是你的libmono.so(或加载它的类,虽然这些可能是culpurit),它恰好发生在加载该库的过程中。

本机库的JNI_OnLoad()函数返回JNI版本以指示它能够继续,如果确定无法继续,则返回0。看起来失败的分配导致它返回0表示它无法初始化,因此无法使用。

至于“无法映射库'libmono.so'。没有vspace可用。” - 这是一个开源项目,对吗?我想你会找到JNI_OnLoad源来自行回答这个问题。