自己整了个JNI接口(myjni),用模拟器跑的。
有人遇到过这个问题吗?
04-28 17:38:39.550: DEBUG/dalvikvm(5865): Trying to load lib /data/data/cc.androidtest.jni/lib/libmyjni.so 0x43d01820
04-28 17:38:39.581: DEBUG/dalvikvm(5865): Added shared lib /data/data/cc.androidtest.jni/lib/libmyjni.so 0x43d01820
04-28 17:38:39.622: DEBUG/dalvikvm(5865): No JNI_OnLoad found in /data/data/cc.androidtest.jni/lib/libmyjni.so 0x43d01820
04-28 17:38:39.751: DEBUG/tag(5865): Jni Test Created !!!
04-28 17:38:39.751: DEBUG/dalvikvm(5865): +++ not scanning '/system/lib/libwebcore.so' for 'write' (wrong CL)
04-28 17:38:39.761: DEBUG/dalvikvm(5865): +++ not scanning '/system/lib/libmedia_jni.so' for 'write' (wrong CL)
04-28 17:38:39.761: DEBUG/dalvikvm(5865): +++ not scanning '/system/lib/libexif.so' for 'write' (wrong CL)
04-28 17:38:39.761: DEBUG/dalvikvm(5865): +++ not scanning '/system/lib/libsrec_jni.so' for 'write' (wrong CL)
04-28 17:38:39.761: WARN/dalvikvm(5865): No implementation found for native Lcc/androidtest/jni/JNI;.write ()V
04-28 17:38:39.771: DEBUG/AndroidRuntime(5865): Shutting down VM
04-28 17:38:39.771: WARN/dalvikvm(5865): threadid=3: thread exiting with uncaught exception (group=0x4001b188)
04-28 17:38:39.781: ERROR/AndroidRuntime(5865): Uncaught handler: thread main exiting due to uncaught exception
04-28 17:38:39.800: ERROR/AndroidRuntime(5865): java.lang.UnsatisfiedLinkError: write
04-28 17:38:39.800: ERROR/AndroidRuntime(5865):     at cc.androidtest.jni.JNI.write(Native Method)
04-28 17:38:39.800: ERROR/AndroidRuntime(5865):     at cc.androidtest.jni.JniTest.onCreate(JniTest.java:16)

解决方案 »

  1.   

    04-28 17:38:39.622: DEBUG/dalvikvm(5865): No JNI_OnLoad found in /data/data/cc.androidtest.jni/lib/libmyjni.so 0x43d01820
    你先查查这个是为什么.
      

  2.   

    找不到write方法。你确定你的so里面正确的定义了write方法吗?
      

  3.   

    这个好像不是个错误,我的代码也出现这提示,但是里面代码是被执行的。http://blog.csdn.net/hongmy525/archive/2009/10/13/4665460.aspx
      

  4.   

    函数名需要按照 JNI 的规范(因此也可以用 javah -jni 工具来生成头文件,来保证函数名的正确性).
    Java_com_test_TestHelloLib_printHello 的命名对应后面在 java 代码中, package 名字是 com.test ,类名是 TestHelloLib , native 函数名是 printHello 。只是c文件中的函数名命名不规范造成的找不到函数罢了。比如你要用个函数名称叫做myWrite(...),那么在C中你应该给myWrite函数声明为
    jint Java_com_test_TestHelloLib_myWrite( JNIEnv*  env,  jobject  this,jint x) {
    ...
    }
    而在Java中调用时只需要call myWrite(x)就可以了。