Android中C++调用Java实现
2013-03-25 21:56
447 查看
1:需求分析
在Android中利用NDK进行编程的时候,一般的都是Java层通过JNI调用C++的相关接口,而在有的应用中,需要通过底层C++调用Java层来实现相关功能。比如在进行OMX硬解码画图的时候,需要在底层不断发送请求给Java层,让其不断刷新GlSurfaceView。2:java层接口
a://弹出消息对话框public static
int showMessage(Stringtitle,String val)
{
newAlertDialog.Builder(m_scMnCtx)
.setTitle(title)
.setMessage(val)
.setPositiveButton("确定",
new DialogInterface.OnClickListener(){
publicvoidonClick(DialogInterface
dialoginterface,int i){
}}).show();
return 0;
}
其中参数title为标题,val为消息内容。
b:
native方法
publicnativestaticint
testCallBack(Stringtitle,String val)
3:JNI层接口
/** Class: org_yao_ndk_NDKTest
* Method: testCallBack
* Signature: (Ljava/lang/String;Ljava/lang/String;)I
*/
JNIEXPORT jint JNICALLJava_org_yao_ndk_NDKTest_testCallBack
(JNIEnv *env, jclass obj, jstringtitle, jstring val)
{
jmethodID java_method =env->GetStaticMethodID(obj,
"showMessage","(Ljava/lang/String;Ljava/lang/String;)I");
if(java_method == 0)
{
return 0;
}
env->CallStaticIntMethod(obj,java_method,title,val);
return 1;
}
其中,GetStaticMethodID获取java中静态方法的ID,obj为方法所在的类,showMessage为Java层接口名,"(Ljava/lang/String;Ljava/lang/String;)I"其中括号里面对应native方法testCallBack输入参数,外面为返回参数,可以参考/*Signature*/注释信息。在获取到方法ID以后就可以用CallStaticIntMethod来调用Java层接口showMessage了。其中CallStaticIntMethod中Int要和publicnative
static int testCallBack(String title,String val)中int一致。
4:调用实现
//为btnShow(C++调用Java)Button加入监听事件btnShow.setOnClickListener(newView.OnClickListener() {
@Override
publicvoid onClick(View v) {
// TODO Auto-generatedmethod stub
//单击btnShow,弹出消息对话框
NDKTest.testCallBack("test","It
is C++ call Java testing");
}
});
这里先通过Java调用C++接口testCallBack,然后在testCallBack中,实现调用Java层接口showMessage,实现Java和C++的互调。当然直接调用Java接口showMessage更简单。
5:测试结果
![](http://img.my.csdn.net/uploads/201303/25/1364220078_6667.png)
相关文章推荐
- Cocos2dx中Android部分的c++和java实现相互调用
- Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
- 在Android中,通过JNI实现C++与Java相互调用
- Cocos2dx中Android部分的c++和java实现相互调用
- JNI NDK (AndroidStudio+CMake )实现Java调用C C++代码流程
- 二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
- Android利用JNI实现java调用C或C++
- Android下c++调用java实现内置外置sd卡MP3扫描并保存在文件中
- 二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
- JNI NDK (AndroidStudio+CMake )实现C C++调用Java代码流程
- 二、Cocos2dx中Android部分的c++和java实现相互调用(高级篇)
- Android开发 通过JNI实现JAVA与C/C++程序间的调用和回调
- Android JNI/NDK开发(2)JNI实现C/C++与Android/JAVA相互调用
- 关于Android 添加系统级(java)服务和调用的编写实现说明
- 关于Android 添加系统级(java)服务和调用的编写实现说明
- 在c++中可以调用java中的方法,从而实现java与c++的的交互。
- Java通过调用C/C++实现的DLL动态库――JNI的方法
- Java调用C/C++实现的DLL动态库——JNI(转)
- android jni c/c++线程通过CallVoidMethod调用java函数出现奔溃问题
- Android JNI简单实例(Android java调用C/C++代码)