2012-04-22 113 views
0

我嘗試獲取一個正在運行的Android應用程序,該應用程序在本機中實現了其部分代碼。 它確實找到共享庫的,但是當它試圖在模擬器上運行它,它會調用loadNativeCode我得到:loadNativeCode未註冊

AndroidRuntime(1342): java.lang.UnsatisfiedLinkError: loadNativeCode 

據我跟蹤它似乎錯過任何一個電話代碼register_android_app_NativeActivity其中規定了映射loadNativeCode。但由於這是在運行時完成的,我不知道爲什麼它不起作用。

+0

可能是本機庫(某些.so在/ libs iirc)在apk中丟失 – zapl 2012-04-22 21:36:41

+0

本機庫是什麼? – abergmeier 2012-04-22 21:40:20

+0

有你從Java使用的代碼 - 不知道你的情況究竟是什麼 – zapl 2012-04-22 21:57:08

回答

0
JNI 
loadNativeCode native function MUST format as: 

Static way: 
JNIEXPORT void JNICALL Java_com_tapir_android_jniutils_test_MainActivity_emptyf(JNIEnv *env, jobject obj) 
{ 
... 
} 
package name is com.tapir.android.jniutils.test 
class name is MainActivity 
function name is emptyf 

Dynamic way,use RegisterNatives to register your native function in JNI_onLoad function 

JNINativeMethod nm; 
nm.name = "emptyf"; 
/* method descriptor assigned to signature field */ 
nm.signature = "()V"; 
nm.fnPtr = native_emptyf; 
env->RegisterNatives(cls, &nm, 1); 

native_emptyf MUST like as 
void native_emptyf(JNIEnv *env, jobject obj) 
{ 
... 
} 

hope can help u