android jni代码env->GetFieldID无法执行 本帖最后由 lixuelong 于 2011-07-11 13:53:19 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你的java里 包 类 方法是com.jni.test JNItest printJNIC里面定义成static jintcom_jni_JNItest_printJNI(JNIEnv *env, jobject thiz) 不对吧应该是static jintcom_jni_test_JNItest_printJNI(JNIEnv *env, jobject thiz)吧我也是新手。不一定对,呵呵 正解 printJNI是定义在包com.jni内的类JNItest中不是在com.jni.test的类JNItest jni里面的方法可以随便指定,你们可以试试 这样类找不到那个方法也没用 log上应该有提示的 com_jni_JNItest_printJNI 换个名字吧。比如 _printJNI jni_onLoad方式,不必要用标准的jni命名方式。用了反而引起误会另外, 你env->GetFieldID(clazz, "mNativeContext", "I")干啥呢?应该:fields.context = env->GetFieldID(clazz, "mNativeContext", "I"); 问题不在fields.context = env->GetFieldID(clazz, "mNativeContext", "I"),我之前为了调试改成的env->GetFieldID(clazz, "mNativeContext", "I"),无论怎么改,这两种方法都不执行,有这句话的话,该方法都进不来! env->GetFieldID(clazz, "mNativeContext", "I");这样可以编译的过去吧 要改成(*env)->GetFieldID(clazz, "mNativeContext", "I"); 估计是环境的问题,我也有这样的问题,现在也没有解决,【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")为什么取不到,是因为那一块环境没有设置吗?各位大侠,有遇到这样的问题吗,请赐教 编译可以通过,运行的时候只要该方法中存在fields.context = env->GetFieldID(clazz, "mNativeContext", "I")的话,该方法直接进不来,但是没有错误的log,把这句话注释掉的话,所有的代码都可以顺利的运行了。另外补充一点:我把上述代码让同学在他们公司的环境下编译后把生成的so包发给我竟然可以正常运行了!!请问这样的情况有没有遇到过的? 我用另外个工程试的GetFieldID,你升级一下make试试 升级输入 sudo apt-get install make Android 播放3g2格式的视频时 请问如何在信号图标的旁边加入新图标? Andorid 上传视频抛出java.lang.outofmemoryError andrioid官方怎么没有SDK下载了,只有升级包? 注册不填写用户名和密码时会报错,为什么呢?? surfaceview中的hassurface 设置surfaceview大小后显示视频上边黑边下边灰边 Sqlite之Query 字符串 backString.equals("0") 为何为false js 如何调用android 设置spinner的宽度 No ADV available
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)吧我也是新手。不一定对,呵呵
正解 printJNI是定义在包com.jni内的类JNItest中不是在com.jni.test的类JNItest
比如 _printJNI jni_onLoad方式,不必要用标准的jni命名方式。用了反而引起误会
另外, 你env->GetFieldID(clazz, "mNativeContext", "I")干啥呢?应该:
fields.context = env->GetFieldID(clazz, "mNativeContext", "I");
env->GetFieldID(clazz, "mNativeContext", "I");这样可以编译的过去吧
要改成(*env)->GetFieldID(clazz, "mNativeContext", "I");
【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")
为什么取不到,是因为那一块环境没有设置吗?各位大侠,有遇到这样的问题吗,请赐教