cocosandroid開發
❶ 如何在Android上使用plugin-x
如何在ANDROID上使用PLUGIN-X
需要的環境
python 2.7 http://www.python.org
Ant http://ant.apache.org
Cygwin (如果使用windows)
編譯插件
首先,我們需要編譯libPluginProtocal和所有我們需要的插件。在frameworks/js-bindings/cocos2d-x/plugin/tools/config.sh文件中,刪掉ALL_PLUGINS里我們不需要的插件。然後在終端(windows上需要使用cygwin)運行frameworks/js-bindings/cocos2d-x/plugin/tools/publish.sh腳本,它會要求輸入一些環境變數的配置。
在windows上,我們需要輸入Linux風格的路徑。例如,你應該輸入C:/adt-bundle-windows/sdk,而不是C:\adt-bundle-windows\sdk。
所有編譯完成以後,會在plugin-x的根目錄下生成一個publish文件夾。如果你的publish文件夾看起來和下圖一樣,說明你的編譯成功了!
修改你的游戲工程
我們需要做哪些修改?
修改.mk文件(Android.mk & Application.mk)來鏈接plugin-x生成的C++靜態庫。
修改android工程配置鏈接plugin-x和第三方SDK庫的jar包。
修改AndroidManifest.xml,增加一些插件需要的許可權。
對一些特定的插件,還要添加外部依賴項目和資源。
增加一些初始化代碼。
使用腳本工具
如果你是一個android開發的專家,你完全可以自己完成這些修改。這很容易,不是嗎?不,一點也不!幸運的是我們有一個腳本工具來完成大部分的修改。在你的終端(windows上使用cygwin)里運行frameworks/js-bindings/cocos2d-x/plugin/tools/gameDevGuide.sh腳本,它會有一個python寫的UI界面,看起來像這樣:
輸入你的工程路徑,注意不能含有空格,然後點擊'Next'。
選擇你需要的插件,然後點擊'Finish',程序會自動完成需要做的修改。
一些手工修改
把publish文件夾路徑添加到NDK_MODULE_PATH環境變數,例如: NDK_MODULE_PATH=${PLUGIN_ROOT}/publish。一個簡單的方法就是在工程的build-cfg.json文件中,吧publish文件夾路徑添加到ndk_mole_path數組中。
在build-cfg.json文件的_resources中,添加:
{
"from": "../../../../frameworks/js-bindings/cocos2d-x/plugin/jsbindings/script",
"to": ""
}
在AppDelegate.cpp中添加:
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "jsb_cocos2dx_pluginx_auto.hpp"
#include "jsb_pluginx_extension_registration.h"
#endif
bool AppDelegate::applicationDidFinishLaunching()
{
//...
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS || CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
sc->addRegisterCallback(register_all_pluginx_protocols);
sc->addRegisterCallback(register_pluginx_js_extensions);
#endif
//...
}
在jni/main.cpp中添加代碼:
#include "PluginJniHelper.h"
void cocos_android_app_init (JNIEnv* env, jobject thiz) {
LOGD("cocos_android_app_init");
AppDelegate *pAppDelegate = new AppDelegate();
javaVM* vm;
env->GetJavaVM(&vm);
PluginJniHelper::setJavaVM(vm);
}
在AppActivity.java中添加代碼:
import org.cocos2dx.plugin.PluginWrapper;
public class AppActivity extends Cocos2dxActivity {
public Cocos2dxGLSurfaceView onCreateView() {
Cocos2dxGLSurfaceView glSurfaceView = new Cocos2dxGLSurfaceView(this);
glSurfaceView.setEGLConfigChooser(5, 6, 5, 0, 16, 8);
PluginWrapper.init(this);
PluginWrapper.setGLSurfaceView(glSurfaceView);
return glSurfaceView;
}
}
在js代碼中使用plugin-x
裝載和卸載插件
所有的插件都是使用PluginManager管理,通過插件名來裝載/卸載,例如:
// load plugin AnalyticsFlurry
var g_pAnalytics = plugin.PluginManager.getInstance().loadPlugin("AnalyticsFlurry");
// unload plugin AnalyticsFlurry
plugin.PluginManager.getInstance().unloadPlugin("AnalyticsFlurry");
使用插件功能
你可以通過方法名和參數直接調用插件中定義的方法,例如:
// enable the debug mode
g_pAnalytics.setDebugMode(true);
g_pAnalytics.startSession(s_strAppKey);
g_pAnalytics.setCaptureUncaughtException(true);
// call function with params
g_pAnalytics.callFuncWithParam("setUserId", new plugin.PluginParam(plugin.PluginParam.ParamType.TypeString, "123456"));