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 使用(示例代码)相关推荐

  1. 微信小程序实现直播间点赞飘心效果的示例代码

    微信小程序实现直播间点赞飘心效果的示例代码 https://blog.csdn.net/qappleh/article/details/83865874

  2. python调用百度接口实现ocr识别_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  3. python 百度ocr安装_Python调用百度OCR实现图片文字识别的示例代码

    百度AI提供了一天50000次的免费文字识别额度,可以愉快的免费使用!下面直接上方法: 首先在百度AI创建一个应用,按照下图创建即可,创建后会获得如下: 创建后会获得如下信息: APP_ID = '* ...

  4. python开发安卓程序-python可以编写android程序吗?

    python可以编写android程序吗?答案是肯定的.Android不直接支持使用python开发应用,需要使用其它中间件或者库.PythonForAndroid.CLE以及Wrapandroid ...

  5. 微信小程序调用php,微信小程序调用PHP后台接口 解析纯html文本

    微信小程序调用php后台接口,解析纯html文本,效果图片预览 1.微信js动态传参: wx.request({ url: 'https://m.****.com/index.php/home/xia ...

  6. android 程序运行不了,Android程序运行时,真机不能用

    Android程序运行时,真机不能用 下列情况均发生在手机"开发人员选项"内已经选择了USB调试的情况下. 一.Android Device chooser中不显示真机 [查找原因 ...

  7. Android网络通信的六种方式示例代码

    表1展示了Android SDK中的一些与网络有关的API包名 表1. Android SDK 网络包 包                      描述                        ...

  8. java php python 高并发_关于php如何调用Python快速发送高并发邮件的示例代码

    1 简介 在PHP中发送邮件,通常都是封装一个php的smtp邮件类来发送邮件.但是PHP底层的socket编程相对于python来说效率是非常低的.CleverCode同时写过用python写的爬虫 ...

  9. Call 从一个批处理程序调用另一个批处理程序,并且不终止父批处理程序。

    想写一个批处理文件去调用多个批处理文件,按照以前写的调用多个程序的方法 a.exe b.exe c.exe 写了一个 startAll.bat --------------------内容------ ...

最新文章

  1. iis 无法连接mysql_远程无法连接SQL2000及MySQL的原因和解决办法
  2. C++ Primer这本书怎么样?
  3. 【Floyed】【匈牙利算法】导弹(jzoj 1610)
  4. leetcode596. 超过5名学生的课(SQL)
  5. 图结构练习——最小生成树
  6. python excel案例导入jira_Python操作Jira库常用方法解析
  7. rpm包安装mysql的弊端_rpm包安装mysql的常见问题
  8. php 连接redis服务器
  9. CarMaker试用版许可证申请与软件安装过程
  10. 锐起无盘服务器陈列设置,原创]锐起无盘安装全图文设置,含SCII设置在内
  11. 进销存excel_Excel仓库进销存管理系统,全函数库存,查询汇总自动生成超简单...
  12. Code Review关注点
  13. 操作系统-为什么进程之间的通信必须借助操作系统内核功能?
  14. NLP学习笔记「第二章」2.2 N-gram Language Models(N元语言模型)
  15. $ is not a function
  16. Android6.0 源码修改之Settings音量调节界面增加通话音量调节
  17. ESP32-C3使用LEDC外设实现呼吸灯效果
  18. 【智驾深谈】一张图看清自动驾驶产业
  19. sympy 符号函数求导
  20. React 脚手架安装

热门文章

  1. 王者荣耀服务器卡顿修复了吗,王者荣耀太卡了怎么办?王者荣耀fps设置技巧
  2. postman下载和使用 转载
  3. STM32的GPIO的七个寄存器的配置说明
  4. TP-Link路由无线WDS桥接
  5. LeetCode 唯一摩尔斯密码词
  6. 105-为什么会有两种形式的消电离层组合
  7. android 小影app,小影视频制作软件
  8. mysql数据库主从复制步骤_MySQL搭建主从复制详细步骤
  9. 未来最高明的数据恢复师
  10. 苹果系统游戏平台怎样对接游戏?