私の仕事は Android フレームワークの移植です。
Android Jelly Bean で実行できない 3 番目の APK がたくさんあります。(これらはすべて 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 で何をしますか? (一部のモジュールまたは共有ライブラリを失いますか?)
どうもありがとう、ちんく