2012-04-22 116 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