android jni中C++与java互相调用小结
来源:互联网 发布:类似snapchat特效软件 编辑:程序博客网 时间:2024/05/16 09:41
android jni中C++与java互相调用小结
刚学jni 在C++与java互相调用中碰到不少困难,现在互相调用成功了,特此写文做结。
环境:android-ndk-r9c
1、java类代码:
public class FfmpegJni {
private int m_sId;
public FfmpegJni(){m_sId++;}
//natvie必须声明,用于生成C/C++代码。以下函数能成功调用动态库函数。
public native String hello();
// 该函数在C++中调用不成功,因此,如果C++要调用java中类方法,我采用了一种技巧,就是采用下面的静态方法调用,参数把类对象传回来,这样就可以实现了。
// 为啥该调用无法成功希望大牛看到能给指点下,开开眼界。
public void notification(){
//System.out.println("Got a notification.");
Log.w("rLook", "Got a notification.");
}
// 以下函数在C++中成功调用
public static void notificationByStatic(Object obj){
FfmpegJni jt=(FfmpegJni)obj;
String s = String.format("Got a notification in a static method[%05d].", jt.m_sId++);
Log.w("rLook", s);
//System.out.println("Got a notification in a static method.");
}
}
2、CPP文件
// 调用java函数
// 调用java非静态,失败,原因未知,技巧采用下面静态调用来解决该问题
int CallNotification(JNIEnv *env, jobject &jthis)
{
jclass business_class = env->GetObjectClass(jthis);
jmethodID notification_method = env->GetMethodID(business_class, "notification", "()V");
env->CallVoidMethod(business_class, notification_method);
return 0;
}
// 调用java静态,成功!
int CallNotificationS(JNIEnv *env, jobject &jthis)
{
jclass business_class = env->GetObjectClass(jthis);
jmethodID notification_method_static = env->GetStaticMethodID(business_class, "notificationByStatic", "(Ljava/lang/Object;)V");
env->CallStaticVoidMethod(business_class, notification_method_static, jthis);
env->CallStaticVoidMethod(business_class, notification_method_static, jthis);
env->CallStaticVoidMethod(business_class, notification_method_static, jthis);
return 0;
}
// 被java调用
jstring Java_com_app_z_rlook_FfmpegJni_hello
(JNIEnv *env, jobject jthis){
CallNotificationS(env, jthis);
//CallNotification(env, jthis);
return env->NewStringUTF("Hello jni!");
}
- android jni中C++与java互相调用小结
- JNI JAVA与C的互相调用
- android Java与JNI层互相调用
- Android Ndk中C与JAVA之间的互相调用
- Android JNI之Java和C互相调用
- Android JNI中C和JAVA代码之间的互相调用
- java jni与c++互相调用
- Android JNI中C调用Java方法
- Android NDK开发 Java与C互相调用实例详解
- Android NDK开发----- Java与C互相调用实例详解
- Android NDK开发----- Java与C互相调用实例详解
- 安卓学习笔记---JNI实现Java与C之间进行互相调用
- Android之webkit内核JNI层与Java层 函数互相调用方法
- 【转载】Android之webkit内核JNI层与Java层 函数互相调用方法
- cocos2d-x中通过Jni实现Java与C++的互相调用
- [cocos2dx]在cocos2dx中通过Jni实现Java与C++的互相调用(一)
- [cocos2dx]在cocos2dx中通过Jni实现Java与C++的互相调用(二)
- android中实现JavaScript与Java之间实现互相调用
- (基于Java)算法之合并排序
- 三点顺序(nyoj 68)
- 全面解析回溯法:算法框架与问题求解
- 安卓中的Context
- zoj 3327 Friend Number 模拟题
- android jni中C++与java互相调用小结
- DatePicker的使用(二)
- 分类算法之朴素贝叶斯分类(Naive Bayesian classification)
- IPC——共享内存与信号灯的基本函数整理
- week7_2
- 设一个长度为10的整型数组, 0)要求每个元素的值通过scanf输入,输入完成后, 1)请顺序输出这些整数, 2)请倒序输出这些整数, 3)输出这些数中的最大值, 4)输出这些数中的最小值
- Linux操作命令总结(二)
- Android 实用工具Hierarchy Viewer实战
- android-UI组件(二):TextView及其子类