android - JNI_OnLoad 在 android libmono.so 中失败

标签 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 转储在错误消息下方

**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 中做了什么? (我是否丢失了一些模块或共享库?)

非常感谢, 金库

最佳答案

看起来您的应用程序正在尝试分配过多的内存,而 Android 已经受够了。原因不一定是您的 libmono.so(或加载它的类,尽管这些可能是罪魁祸首),它恰好发生在该库的加载过程中。

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

至于“无法映射库‘libmono.so’。没有可用的虚拟空间。” -- 这是一个开源项目,对吧?我想您会毫不费力地找到 JNI_OnLoad 源来自己回答这个问题。

关于android - JNI_OnLoad 在 android libmono.so 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12298790/

相关文章:

java - 在android中使用POST调用spring Controller 会导致参数为空

visual-c++ - 如何在 VC++ 6.0 中自动链接调试/发布库?

c - 为什么 LD_PRELOAD 似乎不适用于 wc 写入

java - 为什么需要创建一个临时数组来将数组从 jni 返回到 java

android - 使用 Android 教程方法重新缩放图像

java - 如何传递ArrayList<Fragment>?

iphone - 当我从经度和纬度创建位置字符串时,为什么在 iOS 中会出现此链接器错误?

android - java.lang.UnsatisfiedLinkError when loading native library in Android 5.0

java - 使用 gcc 创建共享库

java - 除非我的应用程序批准,否则阻止 Android 手机连接到 WiFi 网络?