C++调用Android 与Android调用C++ 例子
来源:互联网 发布:网络剧发行方式 编辑:程序博客网 时间:2024/06/05 06:33
现在我们在Android上玩到的游戏,大都是由C++编写的,然后通过NDK编译,才能运行在Android上。而C++与Android之间的交互,通过NDK这个编译工具。那么C++与Android之间是如何交互的?
Android调用C++,我们通过从C++返回一个String来作为例子。
C++调用Android,这里通过弹出一个提示框。
Android工程名:com.example.cocos2dinput
Activity名:MainActivity
首先是Android层的MainActivity源代码:
public class MainActivity extends Activity {TextView ContentTextView;Button buttonCallC;String contentString;public static Context mContext;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);contentString=getStringFromC();ContentTextView=(TextView)findViewById(R.id.text1);ContentTextView.setText(contentString);button=(Button)findViewById(R.id.button1);buttonCallC=(Button)findViewById(R.id.button2);mContext=this.getApplicationContext();buttonCallC.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubcallShowMessage();}});}public void showMessage(){Log.d("showMessage", "showMessage");AlertDialog.Builder builder=new Builder(this);builder.setTitle("C++调用Android");builder.setMessage("这是一个C++调用Android的例子");builder.show();}public native String callShowMessage();public native String getStringFromC();@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}static{System.loadLibrary("cocos2dinput");}}
下面是jni.cpp
#include<string.h>#include<jni.h>#include<android/log.h>JNIEnv *g_env;jobject *g_object;extern "C"{JNIEXPORT jstring JNICALL Java_com_example_cocos2dinput_MainActivity_getStringFromC(JNIEnv* env,jobject thiz){return env->NewStringUTF("callCMessageBox");}//下面的函数首先被Android调用然后在函数里面又调用了JavaJNIEXPORT jint JNICALL Java_com_example_cocos2dinput_MainActivity_callShowMessage(JNIEnv* env,jobject thiz){jmethodID notification_method = env->GetMethodID(env->GetObjectClass(thiz),"showMessage","()V");env->CallVoidMethod(thiz,notification_method);return 0;}}
Android.mk
LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)LOCAL_LDLIBS := -llogLOCAL_MODULE := cocos2dinputLOCAL_SRC_FILES :=./jni.cppinclude $(BUILD_SHARED_LIBRARY)
记得用NDK编译,编译命令是:
ndk-build
上我们的效果图:
- android binder c++层-客户端(c++) 调用 服务端(c++) 例子
- Android C调用Java
- Android NDK 调用C
- android java 调用 c
- cocos2dx调用android代码,android调用c
- C++调用Android 与Android调用C++ 例子
- android JNI调用C/C++
- Android NDK调用c/c++
- NDK:android调用c代码
- android调用C二进制程序
- android jni调用c库
- android 编译调用C代码
- Android JNI 调用 C/C++
- Android JNI 调用 C/C++
- Android JNI C调用Java
- android项目调用c接口
- Android Studio 调用 c c++
- android NDK--C 调用java
- 灰度直方图均衡化(上)
- Android平台一些流行的使用3D技术开发的锁屏
- Ext在IE9上报错:对象不支持“createContextualFragment”属性或方法
- Struts2之自定义类型转换器
- 解决ie9不支持extjs3.3对象的“createContextualFragment”属性或方法
- C++调用Android 与Android调用C++ 例子
- ios里icon使用规范
- 【热门主题:英雄联盟壁纸大全】
- thinkphp 模型扩展一
- java设计模式—工厂模式
- mac下设置root用户密码
- java正则表达式
- 华为2013机试题 大数相减JAVA实现
- 从IT菜鸟变为“IT骨干开发者”的11个建议