cocos2dx 应用程序调用已有的android程序,cocos2dx-JniHelper 使用(示例代码)
1.操作的游戏工程和cocos2d_x游戏引擎是一个目录的
2.跟jni相关的C++代码文件放在proj.android\jni\hellocpp目录下,每加一个cpp文件,都需在proj.android\jni的Andriod.mk文件中添加:
LOCAL_SRC_FILES := hellocpp/main.cpp hellocpp/test.cpp \
...
3.跟jni相关的java代码文件放在proj.android\src\jt\SwordsMen目录下
一、C++调用Andriod接口
1.定义一个.h文件“test.h”,内容:
extern "C" //因为jni将java代码转过来是c的,所以C++引用得加上
{
void showExitPt(const char *title, const char *msg); //showExitPt将调用Andriod工程中实现的方法
}
2.定义一个.cpp文件“test.cpp”,内容:
#include #include "platform/android/jni/JniHelper.h"...
//表示proj.android\src\jt\SwordsMen\JniTestHelper.java的,在该文件里有showTipDialog的实现
#define CLASS_NAME "jt/SwordsMen/JniTestHelper"
//事实上,showExitPt一般都是跟showTipDialog同名的,这里为了区分,写成不一样
void showExitPt(const char *title, const char *msg) {
JniMethodInfo t;
//getStaticMethodInfo判断是否在java中实现了名字showTipDialog的方法
//"(Ljava/lang/String;Ljava/lang/String;)V" 对该方法的一个描述,详见说明 if(JniHelper::getStaticMethodInfo(t, CLASS_NAME, "showTipDialog", "(Ljava/lang/String;Ljava/lang/String;)V")) {
jstring jTitle = t.env->NewStringUTF(title);
jstring jMsg = t.env->NewStringUTF(msg); //根据该方法的返回值调用对应的CallStaticxxxMethod方法,如CallStaticIntMethod
t.env->CallStaticVoidMethod(t.classID, t.methodID, jTitle, jMsg);
t.env->DeleteLocalRef(jTitle);
t.env->DeleteLocalRef(jMsg);
}
}
3.java实现,代码如下,具体代码最后一定提供
定义一个JniTestHelper.java文件,内容:
private static void showTipDialog(final String title, finalString text)
{
Message msg =mHandler.obtainMessage();
msg.what =SwordsMen.SHOW_DIALOG;
DialogMessage dm = newDialogMessage();
dm.title =title;
dm.msg =text;
msg.obj =dm;
msg.sendToTarget();
}
4.程序使用
//需要宏处理,否则so文件生成会有问题
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)#include "../proj.android/jni/hellocpp/test.h"
#endif
voidCMainScene::exitGame()
{
#if(CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)showExitPt("Prompt", "if Exit Game ?");
#endif
#if(CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)ExitDlg *pDlg =ExitDlg::create();
addChild(pDlg, 2);
#endif}
二、Andriod调用C++接口
1.在test.cpp中加入实现内容:
#include "cocos2d.h"
void setPackageName(const char *packageName)
{
CCLog("packageName: %s", packageName);
}
voidexitApp()
{
CCDirector::sharedDirector()->end();
}
2.Andriod工程中的声明(JniTestHelper.java):
public static native voidsetPackageName(String packageName);
public static native void exitApp();
3.将C++实现与Andriod工程中的声明关联(test.cpp)
//1.Java_:是格式,必须加的
//2.jt_SwordsMen_JniTestHelper:是路径proj.android\src\jt\SwordsMen\JniTestHelper.java去掉proj.andriod\src的部分
//3.setPackageName:是Andriod工程中声明的名字
//4.中间需要_分开 void Java_jt_SwordsMen_JniTestHelper_setPackageName(JNIEnv *env, jobject thiz, jstring packageName)
{
const char *pkgName = env->GetStringUTFChars(packageName, NULL);
setPackageName(pkgName);
env->ReleaseStringUTFChars(packageName, pkgName);
}
void Java_jt_SwordsMen_JniTestHelper_exitApp(JNIEnv *env, jobject thiz)
{
exitApp();
}
4.程序调用:
JniTestHelper.exitApp();
JniTestHelper.setPackageName(this.getPackageName());
cocos2dx 应用程序调用已有的android程序,cocos2dx-JniHelper 使用(示例代码)相关推荐
- 微信小程序实现直播间点赞飘心效果的示例代码
微信小程序实现直播间点赞飘心效果的示例代码 https://blog.csdn.net/qappleh/article/details/83865874
- python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码
百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...
- python 百度ocr安装_Python调用百度OCR实现图片文字识别的示例代码
百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...
- python开发安卓程序-python可以编写android程序吗?
python可以编写android程序吗?答案是肯定的.Android不直接支持使用python开发应用,需要使用其它中间件或者库.PythonForAndroid.CLE以及Wrapandroid ...
- 微信小程序调用php,微信小程序调用PHP后台接口 解析纯html文本
微信小程序调用php后台接口,解析纯html文本,效果图片预览 1.微信js动态传参: wx.request({ url: 'https://m.****.com/index.php/home/xia ...
- android 程序运行不了,Android程序运行时,真机不能用
Android程序运行时,真机不能用 下列情况均发生在手机"开发人员选项"内已经选择了USB调试的情况下. 一.Android Device chooser中不显示真机 [查找原因 ...
- Android网络通信的六种方式示例代码
表1展示了Android SDK中的一些与网络有关的API包名 表1. Android SDK 网络包 包 描述 ...
- java php python 高并发_关于php如何调用Python快速发送高并发邮件的示例代码
1 简介 在PHP中发送邮件,通常都是封装一个php的smtp邮件类来发送邮件.但是PHP底层的socket编程相对于python来说效率是非常低的.CleverCode同时写过用python写的爬虫 ...
- Call 从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。
想写一个批处理文件去调用多个批处理文件,按照以前写的调用多个程序的方法 a.exe b.exe c.exe 写了一个 startAll.bat --------------------内容------ ...
最新文章
- iis 无法连接mysql_远程无法连接SQL2000及MySQL的原因和解决办法
- C++ Primer这本书怎么样?
- 【Floyed】【匈牙利算法】导弹(jzoj 1610)
- leetcode596. 超过5名学生的课(SQL)
- 图结构练习——最小生成树
- python excel案例导入jira_Python操作Jira库常用方法解析
- rpm包安装mysql的弊端_rpm包安装mysql的常见问题
- php 连接redis服务器
- CarMaker试用版许可证申请与软件安装过程
- 锐起无盘服务器陈列设置,原创]锐起无盘安装全图文设置,含SCII设置在内
- 进销存excel_Excel仓库进销存管理系统,全函数库存,查询汇总自动生成超简单...
- Code Review关注点
- 操作系统-为什么进程之间的通信必须借助操作系统内核功能?
- NLP学习笔记「第二章」2.2 N-gram Language Models(N元语言模型)
- $ is not a function
- Android6.0 源码修改之Settings音量调节界面增加通话音量调节
- ESP32-C3使用LEDC外设实现呼吸灯效果
- 【智驾深谈】一张图看清自动驾驶产业
- sympy 符号函数求导
- React 脚手架安装