Android_NDK_c调用java代码
2013-10-27 18:53
411 查看
本博文为子墨原创,转载请注明出处!
http://blog.csdn.net/zimo2013/article/details/13183499
关于GetMethodID的第三个参数,可以利用javap -s <class完整路径>来得到方法的签名,注意包含后面的;号
http://blog.csdn.net/zimo2013/article/details/13183499
1.找到class字节码文件
jclass clazz = (*env)->FindClass(env, "com/example/ndk/MainActivity"); if(clazz == 0){ //如果该字节码文件不存在 LOGI("error clazz"); return; }
2.找到Method方法
jmethodID method = (*env)->GetMethodID(env, clazz, "add","(II)I"); if(method == 0){ LOGI("method error"); return; }
关于GetMethodID的第三个参数,可以利用javap -s <class完整路径>来得到方法的签名,注意包含后面的;号
3.调用相应的方法
jint result = (*env)->CallIntMethod(env,obj,method,4, 10);//第二个为操作的对象,method为调用的方法,后面为参数信息 LOGI("result = %d", result);
/*jstring barr = (jstring)(*env)->CallObjectMethod(env,obj,method); //可以执行强转 char* charss = Jstring2CStr(env, barr);*/
4.补:将jstring转为char*
//将java语言的就string 转化为c语言中的*char类型 char* Jstring2CStr(JNIEnv* env, jstring jstr) { char* rtn = NULL; jclass clsstring = (*env)->FindClass(env, "java/lang/String"); jstring strencode = (*env)->NewStringUTF(env, "utf-8"); jmethodID mid = (*env)->GetMethodID(env, clsstring, "getBytes", "(Ljava/lang/String;)[B"); jbyteArray barr = (jbyteArray)(*env)->CallObjectMethod(env, jstr, mid, strencode); // String .getByte("GB2312"); jsize alen = (*env)->GetArrayLength(env, barr); jbyte* ba = (*env)->GetByteArrayElements(env, barr, JNI_FALSE); if (alen > 0) { rtn = (char*) malloc(alen + 1); //"\0" memcpy(rtn, ba, alen); rtn[alen] = 0; } (*env)->ReleaseByteArrayElements(env, barr, ba, 0); // return rtn; }
相关文章推荐
- JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程
- AndroidStudio NDK开发 c环境调用java代码
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- Android NDK (学习笔记八) —— Java代码与C代码间方法的调用
- android ndk c代码调用java的代码
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- JNI NDK (AndroidStudio+CMake )实现Java调用C C++代码流程
- Android-NDK开发之基础--Android JNI实例代码(一)-- 在JNI中执行Java方法--C/C++调用Java
- 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译
- Android(安卓)开发通过NDK调用JNI,使用opencv做本地c++代码开发配置方法 边缘检测 范例代码
- Android 开发系列(2) - native代码调用java代码 - 获取硬件 IMEI 和硬件序列号
- 深入了解android平台的jni---本地多线程调用java代码
- android 中 c++ 调用java代码(2)
- NDK Java 调用 C代码
- Android的JNI【实战教程】3⃣️--Java调用C代码
- 【iOS-cocos2d-X 游戏开发之十三】cocos2dx通过Jni调用Android的Java层代码(下)
- 转战Android之NDK(jni, c/c++调用java)
- android java代码调用linux命令续
- cocos2dx 之 android java 与 c++ 互相调用 代码(以百度定位为例子)
- 03_Android NDK中C语言调用Java代码,javah的使用,javap的使用以及生成签名,Android.mk的编写,C代码的编写