现在的位置: 首页 > 综合 > 正文

Plugin-x在Android下的整合

2013年10月02日 ⁄ 综合 ⁄ 共 3504字 ⁄ 字号 评论关闭

Plugin-X 在android下的整合

翻译自:http://www.cocos2d-x.org/projects/cocos2d-x/wiki/Plugin-X_Integration_Guide_for_Android

环境需求

  1. python 2.7. http://www.python.org/(译者注:如果你是Windows环境,这步骤应该可以忽略,因为环境里必须要Cygwin,而Cygwin包含python)
  2. Apache Ant build tool. http://ant.apache.org/
  3. 如果你的操作系统是Windsws,你需要安装Cygwin环境.

编译Plugin-X 项目

1. 运行 publish.sh脚本 ,路径为plugin-x/tools/publish.sh. 这个脚本在 Mac OSX Mountain Lion v10.8.2 和 Cygwin on Windows 7下测试良好. 在脚本第一次运行的时候, 它会让你输入一些参数来设置环境, 如下

在Windows上, 你输入的路径应该以Linux的路径形式输入. 示例 : 你可以输入 C:/adt-bundle-windows/sdk, 而不是C:\adt-bundle-windows\sdk(译者注:本人在windows下试了好久,貌似怎么输都有问题,一怒之下去plugin\tools\toolsForPublish里把checkEnvironment.sh直接改了ANDROID_NDK_PATH="D:/tools/android-ndk-r8b"    
INPUT_SDK_PATH=D:/Progra~1/Android/android-sdk 然后就好了,抓狂

2. 编译完成后, 名为 publish  的文件夹会生成在plugin-x 项目的根目录下. 如果你的 publish 文件夹如下图, 那意味着你的编译成功.

3. publish 文件夹包含如下文件:

  • plugin头文件(*.h)
  • C++ 静态库 (*.a)
  • java 库 (*.jar)
  • makefiles for android (*.mk)
  • 一些插件需求的android 项目

在使用插件之前编辑游戏项目

我们需要做什么?

Plugin-x 为第三方android的SDK封装C/C++ 接口. 所以我们需要编辑游戏项目设置以便能使用它:

  • 编辑 .mk 文件(Android.mk & Application.mk) 来链接由 plugin-x创建的静态库.
  • 编辑android项目设置来链接由 plugin-x 创建的库 和 第三方sdk库. (.jar 文件)
  • 编辑AndroidManifest.xml, 添加 activities的声明, 和游戏使用权限.
  • 对于个别插件, 我们需要添加额外的设置和资源文件.

游戏开发者引导工具

有个名为 gameDevGuide.sh 的脚本,路径 plugin-x/tools/gameDevGuide.sh.
此脚本将帮助你编辑你的游戏项目.

1. 在终端运行该脚本 (在Windows上, 你应该使用Cygwin来运行它). UI界面如下:
(译者注:本人在windows上运行有错啊,提示no display name and no $DISPLAY environment,然后本人搜索到了帖子http://blog.csdn.net/allen_zhao_2012/article/details/8447965 以为没有安装 Xorg
Server 和Xinit,重新安装,折腾了半天,还是那问题,最后发现要启动Xorg Server,就是在运行cygwin之后,输入startx

在edit-box里面输入你的游戏的android项目的路径. 请保证路径没有空格. (译者注:windows下的路径"\"改为"/",不然的话,它也能正常到下一步,但是再继续会出错)然后点击 'Next' 按钮.

2. 选择你需要的插件. UI界面如下:

选择插件之后, 点击 'Finish' 按钮. 该脚本将会编辑你的android项目里的几个配置文件.
以下配置文件将被编辑:

  • Android.mk -------------- 添加游戏依赖的C++ 库
  • Application.mk ----------- 为ndk build添加参数
  • .project ----------------- 链接publish 目录 到 游戏工程 作为资源
  • .classpath --------------- 添加游戏依赖的java 库
  • AndroidManifest.xml ------ 添加游戏所需的插件的activity的声明 和 用户权限

编辑手册

1. 编辑ndk-build 命令参数 : 添加 publish 目录到 NDK_MODULE_PATH 参数下, 如下 :

NDK_MODULE_PATH=${PLUGIN_ROOT}/publish

2. 添加代码到JNI_OnLoad方法下, 如下 :

 1#include "PluginJniHelper.h" 
 2
 3jint JNI_OnLoad(JavaVM *vm, void *reserved)
 4{
 5    JniHelper::setJavaVM(vm);
 6    PluginJniHelper::setJavaVM(vm);  // for plugins
 7
 8    return JNI_VERSION_1_4;
 9}

3. 在游戏的main activity被创建的时候,调用 PluginWrapper.init()方法 :

 1import org.cocos2dx.plugin.PluginWrapper;
 2import org.cocos2dx.lib.Cocos2dxGLSurfaceView;
 3public class HelloIAP extends Cocos2dxActivity{
 4
 5    protected void onCreate(Bundle savedState){
 6        super.onCreate(savedState);
 7        PluginWrapper.init(this); // for plugins
 8
 9        // If you want your callback function can be invoked in GL thread, add this line:
10        PluginWrapper.setGLSurfaceView(Cocos2dxGLSurfaceView.getInstance());
11    }
12
13    static {
14        System.loadLibrary("game");
15    }
16}

4. 特别的插件修改项

如果你的游戏使用的一下插件, 你可能需要一些特殊的修改.
我们已经计划添加这些修改项到开发者指导工具里.

  • 对于nd91

    1. 导入android 工程 91SDK_LibProject_complete 到eclipse里. 工程路径为 plugin-x/publish/nd91/andriod/DependProject
    2. 设置你的游戏工程依赖于91SDK_LibProject_complete工程, 如下图:

    使用plugin-x 在你的C++ 代码里

    加载和卸载插件

    所有的插件由 class PluginManager 管理. 你可以通过插件的类名加载/卸载插件 , 示例代码 :

    1// load plugin IAPNd91
    2s_pNd91 = dynamic_cast<IAPNd91*>
    3(PluginManager::getInstance()->loadPlugin("IAPNd91"));
    4
    5// unload plugin IAPNd91
    6PluginManager::getInstance()->unloadPlugin("IAPNd91");
    7s_pNd91 = NULL;
    

    建议 : 当游戏开始的时候加载插件, 游戏结束的时候卸载插件.

    使用IAP 插件

    你可以调用插件接口. 在使用这些接口之前 , 你最好查看插件的头文件里的描述 . 示例代码:

    1// enable the debug mode
    2s_pNd91->setDebugMode(true);
    3// pay for the product
    4s_pNd91->payForProduct(info);
    

    参考

    1. 截图和示例代码来自plugin-x的例子工程 HelloIAP
    2. 如果你有任何问题,请不要不愿意在这篇wiki上评论, 或者创建issues在github.com/chukong/plugin-x/ 工程上.

    抱歉!评论已关闭.