为cocos2dx添加ndk库

来源:互联网 发布:冰箱品牌 知乎 编辑:程序博客网 时间:2024/05/11 09:16

碰到很多坑:

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库依赖,到此商店系统完成。

原创粉丝点击