本帖最后由 lixuelong 于 2011-07-11 13:53:19 编辑

解决方案 »

  1.   

    你的java里 包 类 方法是
    com.jni.test   JNItest   printJNI
    C里面定义成static jint
    com_jni_JNItest_printJNI(JNIEnv *env, jobject thiz) 不对吧应该是static jint
    com_jni_test_JNItest_printJNI(JNIEnv *env, jobject thiz)吧我也是新手。不一定对,呵呵
      

  2.   


    正解 printJNI是定义在包com.jni内的类JNItest中不是在com.jni.test的类JNItest
      

  3.   

    jni里面的方法可以随便指定,你们可以试试
      

  4.   

    这样类找不到那个方法也没用 log上应该有提示的
      

  5.   

    com_jni_JNItest_printJNI 换个名字吧。
    比如 _printJNI jni_onLoad方式,不必要用标准的jni命名方式。用了反而引起误会
    另外, 你env->GetFieldID(clazz, "mNativeContext", "I")干啥呢?应该:
    fields.context = env->GetFieldID(clazz, "mNativeContext", "I");
      

  6.   

    问题不在fields.context = env->GetFieldID(clazz, "mNativeContext", "I"),我之前为了调试改成的env->GetFieldID(clazz, "mNativeContext", "I"),无论怎么改,这两种方法都不执行,有这句话的话,该方法都进不来!
      

  7.   


     env->GetFieldID(clazz, "mNativeContext", "I");这样可以编译的过去吧
     要改成(*env)->GetFieldID(clazz, "mNativeContext", "I");
      

  8.   

    估计是环境的问题,我也有这样的问题,现在也没有解决,
    【env->GetFieldID(clazz, "mNativeContext", "I");这样可以编译的过去吧
     要改成(*env)->GetFieldID(clazz, "mNativeContext", "I");】
    这种说法是错误的,因为他的JNI是用C++写的,所以不需要加(*),用C写的需要加(*)(*env)->GetFieldID(env,clazz, "mNativeContext", "I");】fields.context = env->GetFieldID(clazz, "mNativeContext", "I")
    为什么取不到,是因为那一块环境没有设置吗?各位大侠,有遇到这样的问题吗,请赐教
      

  9.   

    编译可以通过,运行的时候只要该方法中存在fields.context = env->GetFieldID(clazz, "mNativeContext", "I")的话,该方法直接进不来,但是没有错误的log,把这句话注释掉的话,所有的代码都可以顺利的运行了。另外补充一点:我把上述代码让同学在他们公司的环境下编译后把生成的so包发给我竟然可以正常运行了!!请问这样的情况有没有遇到过的?
      

  10.   

    我用另外个工程试的GetFieldID,你升级一下make试试
      

  11.   

    升级输入 sudo apt-get install make