碰到很多坑:

1:引用库定义成include $(BUILD_SHARED_LIBRARY),结果生成了两个so文件,应该把库声明为BUILD_STATIC_LIBRARY

2:把库的java放到了项目之下,又把jar文件重复引用,导致Unable to execute dex: Multiple dex files define错误

3:库中用到了exception,所以android编译的时候要加上APP_CPPFLAGS := -frtti -fexception

4:修改application name为android:name="com.soomla.store.SoomlaApp" 同时要service和receiver加上配置,否则,没办法监听购买的消息

5:在游戏入口文件中,OnCreate要设置StoreControllerBridge.initialize(mGLView, new MuffinRushAssets(), "AAA", this);

添加Soomla的付费系统:

--jni

--classes

cocos2dx_StoreController.cpp 商店系统的初始化,以及向运营商发送购买请求buyMarketItem,都是通过JniHelpers::jniCommonVoidCall调用java接口

cocos2dx_StoreInfo.cpp 物品配置信息管理器,获取价格,描述等,也是通过JniHelpers::jniCommonVoidCall调用java接口

cocos2dx_StoreInventory.cpp 游戏内的虚拟物品管理器,通过虚拟货币购买虚拟物品,本地管理,不需交互运营商,也是调用java接口

com_soomla_cocos2dx_store_EventHandlerBridge.cpp 为JNICALL函数,当物品购买成功失败等等的java回调的地方,通过cocos2dx_EventHandlers::getInstance()转发给c++中的EventHandler进行处理

--与其他平台公用的类

--classes

cocos2dx_EventHandlers.cpp 事件分发管理器

EventHandler.cpp 事件处理器,向分发管理器注册自己。

jni

以上文件联合libcocos2dx打包成lib文件,在项目中通过$(call import-module,ccstore_shared)加入项目的动态库中

需要实现的java接口:

需要引用soomlastoreactivity.jar,实现具体的商店系统

--com.soomla.cocos2dx.example

MuffinRushAssets 继承自IStoreAssets,获取商店物品配置信息

--com.soomla.cocos2dx.store

StoreControllerBridge 实现cocos2dx_StoreController调用的接口,最终通过库中StoreController实现

StoreInfoBridge 同上

StoreInventoryBridge 同上

EventHandlerBridge回向BusProvider中注册自己,当购买事件回调的时候,会调用响应的JNICALL函数,把事件转发给c++层

打包成jar文件,在项目中把添加java库依赖,到此商店系统完成。

为cocos2dx添加ndk库的更多相关文章

  1. cocos2d-x 添加 libLocalStorage 库...

    说明:由于libLocalStorage底层是用sqlite实现的,所以要先按上面官方提供的集成sqlite的文档,将sqlite添加到项目中. 重点还是android的编译配置,加粗的是需要增加的配 ...

  2. cocos2dx通过ndk编译c++库

    ndk编译c++库,然后通过jni调用实现重要代码封装,是安卓应用中最常用的技术,一方面可以将重要的代码实现隐藏,防止泄漏,也可以提高打包速度. ndk里面的sample文件夹中有很多实用的例子,其中 ...

  3. NDK 开发实例二(添加 Eigen库)

    上一篇,我已经阐述了如何创建一个简单的NDK实例: NDK 开发实例一(Android.mk环境配置下) 在上一篇的基础上,我们来添加Eigen库,然后做一个简单实例. Eigen是一个高层次的C + ...

  4. Android Studio添加原生库并自动构建

    [时间:2017-09] [状态:Open] [关键词:Android,Android Studio,gradle,native,c,c++,cmake,原生开发,ndk-build] 0 引言 最近 ...

  5. 在VS中添加lib库的三种方法

    注意: 1.每种方法也要复制相应的DLL文件到相应目录,或者设定DLL目录的位置,具体方法为:"Properties" -> "Configuration Prop ...

  6. 向modesim中添加alter库 (或者在每次仿真时将库文件加入仿真文件夹一起编译)

    在ModelSim中进行仿真需要加入Quartus提供的仿真库,原因是下面三个方面:    ·Quartus不支持Testbench:    ·调用了megafunction或者lpm库之类的Alte ...

  7. Android驱动入门-Led控制+app+ndk库+底层驱动

    硬件平台: FriendlyARM Tiny4412 Cortex-A9 操作系统: UBUNTU 14.04 LTS 时间:2016-09-20  21:56:48 本次实验使用的是 安卓APP + ...

  8. 在ASP.NET 5中如何方便的添加前端库

    (此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注.) 题记:ASP.NET 5和之前的ASP.NET版本有很大的不同,其中之一就是对前端库的管理不再使用Nuget,而 ...

  9. Auty自动化测试框架第七篇——添加动作库和常量文件库

    [本文出自天外归云的博客园] 添加动作库 因为有很多调用的action类如果一直保存在utils中会让utils库不可维护,所以规定utils库中只放和框架本身有关的工具类,和脚本内容相关的工具类都放 ...

随机推荐

  1. Cool Edit Pro 2.0详细教程(转)

      系统介绍一下用Cooledit pro 2.0录制自唱歌曲的一个全过程,希望对喜欢唱歌,想一展歌喉的朋友有所帮助. 录制原声 录音是所有后期制作加工的基础,这个环节出问题,是无法靠后期加工来补救的 ...

  2. SecureCRT使用Vim出现中文乱码问题的解决

    1. 首先保证securecrt本身显示中文是ok的.如果不是,就先解决这一个问题. 2. vi ~/.vimrc 添加set encoding=utf-8 fileencodings=ucs-bom ...

  3. saltstack:使用教程之一安装及客户端返回写入MySQL

    saltstack使用教程: 1.安装: 需要epel的yum源,没有的话把下面的复制并新建个文件 /etc/yum.repos.d/epel.repo 粘贴即可: [epel] name=Extra ...

  4. vc根据域名获取IP地址 gethostbyname()函数

    以下是VC Socket初始化时用到的两个函数 一.WSAStartup函数                int WSAStartup                       (         ...

  5. 双卡双待支持双电池 夏新N808深度评测_夏新手机评测-泡泡网

    双卡双待支持双电池 夏新N808深度评测_夏新手机评测-泡泡网 双卡双待支持双电池 夏新N808深度评测

  6. ImageMagick 压缩图片 方法

    Images as a percentage of page weight for the Alexa top 10 global web sites  图片在站点所占的比重越来越重.更好的优化图片能 ...

  7. windows下apache如何完整卸载?

    1.运行services.msc,在服务中停止 apache 服务.2.运行命令行程序,输入 sc delete apache,删除该服务3.删除apache文件夹.

  8. 【剑指Offer学习】【面试题17 ::合并两个排序的链表】

    题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是依照递增排序的 链表结点定义例如以下: public static class ListNode { int value; List ...

  9. 有关android工程的构建脚本(build.xml)的学习

    学习[android-sdk-linux根目录]/tools/ant/build.xml,觉得如下几点很有用,记录之 1)ant脚本中属性值是于前置定义优化的原则,即属性发生重复定义时,前面定义的值不 ...

  10. spring mvc 与 jquery ajax

    在 Spring mvc3中,响应.接受 JSON都十分方便. 使用注解@ResponseBody可以将结果(一个包含字符串和JavaBean的Map),转换成JSON. 使用 @RequestBod ...