注意: cocos2d-x 3.x版本后可以使用AnySDK来接入第三方SDK, 比下面介绍的方法方便很多, AnySDK官网
cocos2d-x版本:2.2
开发平台:Windows
官方Wiki介绍了如何接入第三方SDK, 不过是英文的, 我在此更详细的介绍下.官方Wiki地址:点击打开链接
打开ADT(Android Develop Tool, 就是你用来开发Android的Eclipse), 导入cocos2d-x/plugin文件夹下的所有项目, 如图:
这些项目中项目名Hello开头的都是官方的示例, 其中HelloIAP和HelloIAP-JS是和付费相关的示例, 剩余Hello开头的是与广告平台和社交平台的示例. 剩下lib开头的项目中, libPluginProtocol这个项目中是供其他lib开头项目使用的. 还有一个91SDK开头的项目, 这个项目存放了91平台使用过程中的一些UI文件, 如果要使用91平台进行付费, 就必须在你的项目中引入这个项目. 最后还需要libcocos2dx这个项目, 选择导入目录的时候使用cocos2d-x/cocos2dx即可, eclipse会自动寻找.
导入工作完成后, 项目文件上有可能会感叹号或者叉叉, 修改下项目的属性即可.
确保项目文件夹上没有叉叉或者感叹号就可以继续下一步了.
新建一个Android项目, 这里我取名为libPluginMobileMM. 注意这里的包名一定要使用org.cocos2dx.plugin
点击下一步, 此处设置项目为Library, 然后点完成.
设置下新建项目的属性, 将libPluginProtocol这个项目引入到项目中.
在此项目中新建一个文件夹, 取名为sdk(注意大小写), 然后将移动MM SDK文件夹中的.jar文件拷贝到sdk中, 剩下的两个.so文件先不管. 右键刚刚拷贝进来的.jar文件, Build Path -> Add to Build Path. 现在可以开始在新建的项目中写代码了. 新建一个类, 这个类必须实现且只能实现一个接口InterfaceIAP, 代码可以参考libPluginNd91和移动MM给的Demo项目中代码来写.
package org.cocos2dx.plugin; public class AnalyticsFlurry implements InterfaceAnalytics { ... public AnalyticsFlurry(Context context) { mContext = context; } }
代码写好后记得生成一下, 然后在项目中添加一个文件ForManifest.xml, 此文件可以去libPluginNd91中拷贝一份, 不过里面的内容需要修改. 打开ForManifest.xml文件, 将<applicationCfg>节点中的内容和<permissionCfg>节点中的内容替换成移动MM的, 可以去移动MM Demo项目的AndroidManifest.xml中找. 然后再在项目中添加一个build.xml文件, 这个文件同样可以去其他项目中去拷贝, build.xml文件中开头project name的值要改成自己的项目名称, 比如:
<?xml version="1.0" encoding="UTF-8"?> <project name="libPluginMobileMM" default="plugin-publish"> ... </project>
以上这些都做好后, 打开cocos2d-x/plugin/plugins文件夹, 在此建一个文件夹, 我这里取名mobilemm, 在mobilemm文件夹中新建文件夹proj.android, 将刚刚写好的libPluginMobileMM文件夹下中的内容全部拷贝到proj.android中.
接下来修改cocos2d-x/plugin/tools/config.sh这个文件, 用记事本方式打开, 将mobilemm文件夹名添加到ALL_PLUGINS中:
接下来双击运行(或者使用Cygwin控制台)cocos2d-x/plugin/tools下的publish.sh文件. 运行中可能会要求你输入NDK的目录地址, Android SDK的目录文件夹地址和ant的地址. 输入完成后等待处理完成. 处理完成后再运行cocos2d-x/plugin/tools下的gameDevGuide.sh, 输入你的项目的Android项目目录地址, 选择mobilemm或者你要使用的其他插件, 然后下一步, 等待处理完成即可. 这部分官方也有Wiki:点击打开链接export ALL_PLUGINS=("protocols" \ "flurry" "umeng" \ "alipay" "nd91" "mobilemm")
接着, 还需要在你的C++代码和java代码中添加一些代码:
protected void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); PluginWrapper.init(this); // for plugins // If you want your callback function can be invoked in GL thread, add this line: PluginWrapper.setGLSurfaceView(Cocos2dxGLSurfaceView.getInstance()); }
C++部分如何使用可以参考HelloIAP这个项目.
还记得有两个.so文件吗, 将这两个放到你游戏项目的jni文件夹中, 如图:
然后修改上图中的Android.mk文件, 我把我自己的Andorid.mk贴出来, 照着修改就行了.
LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := casdkjni LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libcasdkjni.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := identifyapp LOCAL_SRC_FILES := $(TARGET_ARCH_ABI)/libidentifyapp.so include $(PREBUILT_SHARED_LIBRARY) include $(CLEAR_VARS) LOCAL_MODULE := cocos2dcpp_shared LOCAL_MODULE_FILENAME := libcocos2dcpp MYSRC_ROOT := $(LOCAL_PATH)/../../Classes FILE_LIST += $(wildcard $(MYSRC_ROOT)/*.cpp) LOCAL_SRC_FILES := hellocpp/main.cpp LOCAL_SRC_FILES += $(FILE_LIST:$(LOCAL_PATH)/%=%) LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes LOCAL_WHOLE_STATIC_LIBRARIES += cocos2dx_static \ PluginProtocolStatic LOCAL_WHOLE_STATIC_LIBRARIES += cocosdenshion_static LOCAL_WHOLE_STATIC_LIBRARIES += box2d_static LOCAL_WHOLE_STATIC_LIBRARIES += chipmunk_static LOCAL_WHOLE_STATIC_LIBRARIES += cocos_extension_static LOCAL_WHOLE_SHARED_LIBRARIES += casdkjni LOCAL_WHOLE_SHARED_LIBRARIES += identifyapp #LOCAL_SHARED_LIBRARIES := casdkjni identifyapp include $(BUILD_SHARED_LIBRARY) $(call import-module,cocos2dx) $(call import-module,cocos2dx/platform/third_party/android/prebuilt/libcurl) $(call import-module,CocosDenshion/android) $(call import-module,extensions) $(call import-module,external/Box2D) $(call import-module,external/chipmunk) $(call import-module,plugin/publish/protocols/android)
重新编译一下游戏Android项目, 至此, 移动MM SDK的接入就完成了. 如果有疏漏或者其他问题, 欢迎留言.