集成第三方SDKjava
運行 publish.sh腳本 ,路徑爲plugin-x/tools/publish.sh. 這個腳本在 Mac OSX Mountain Lion v10.8.2 和 Cygwin on Windows 7下測試良好. 在腳本第一次運行的時候, 它會讓你輸入一些參數來設置環境, 以下python
在Windows上, 你輸入的路徑應該以Linux的路徑形式輸入. 示例 : 你能夠輸入 C:/adt-bundle-windows/sdk, 而不是C:\adt-bundle-windows\sdkandroid
編譯完成後, 名爲 publish 的文件夾會生成在plugin-x 項目的根目錄下. 若是你的 publish 文件夾以下圖, 那意味着你的編譯成功.git
Plugin-x 爲第三方android的SDK封裝C/C++ 接口. 因此咱們須要編輯遊戲項目設置以便能使用它:github
有個名爲 gameDevGuide.sh 的腳本,路徑 plugin-x/tools/gameDevGuide.sh. 此腳本將幫助你編輯你的遊戲項目.apache
在終端運行該腳本 (在Windows上, 你應該使用Cygwin來運行它). UI界面以下: windows
在edit-box裏面輸入你的遊戲的android項目的路徑. 請保證路徑沒有空格. (譯者注:windows下的路徑"\"改成"/",否則的話,它也能正常到下一步,可是再繼續會出錯)而後點擊 'Next' 按鈕.app
選擇你須要的插件. UI界面以下:eclipse
選擇插件以後, 點擊 'Finish' 按鈕. 該腳本將會編輯你的android項目裏的幾個配置文件.ide
如下配置文件將被編輯:
編輯ndk-build 命令參數 : 添加 publish 目錄到 NDK_MODULE_PATH 參數下, 以下 :NDK_MODULE_PATH=${PLUGIN_ROOT}/publish
添加代碼到JNI_OnLoad方法下, 以下 :
#include 「PluginJniHelper.h」 jint JNI_OnLoad { JniHelper::setJavaVM; PluginJniHelper::setJavaVM; // for plugins return JNI_VERSION_1_4; }
在遊戲的main activity被建立的時候,調用 PluginWrapper.init()方法 :
import org.cocos2dx.plugin.PluginWrapper; import org.cocos2dx.lib.Cocos2dxGLSurfaceView; public class HelloIAP extends Cocos2dxActivity{ protected void onCreate{ super.onCreate(); PluginWrapper.init(); // for plugins // If you want your callback function can be invoked in GL thread, add this line: PluginWrapper.setGLSurfaceView(); } static { System.loadLibrary; } }
特別的插件修改項 若是你的遊戲使用的一下插件, 你可能須要一些特殊的修改. 咱們已經計劃添加這些修改項到開發者指導工具裏.
對於nd91
導入android 工程 91SDK_LibProject_complete
到eclipse裏. 工程路徑爲 plugin-x/publish/nd91/andriod/DependProject
91SDK_LibProject_complete
工程, 以下圖:
全部的插件由 class PluginManager 管理. 你能夠經過插件的類名加載/卸載插件 , 示例代碼 :
// load plugin AnalyticsFlurry s_pFlurry = dynamic_cast (PluginManager::getInstance()->loadPlugin("AnalyticsFlurry")); // unload plugin AnalyticsFlurry PluginManager::getInstance()->unloadPlugin("AnalyticsFlurry"); s_pFlurry = NULL;
建議 : 當遊戲開始的時候加載插件, 遊戲結束的時候卸載插件.
你能夠調用在協議中聲明的方法. 示例代碼:
// enable the debug mode s_pFlurry->setDebugMode(true); // log an event s_pFlurry->logEvent("music"); // log an event with params LogEventParamMap paramMap; paramMap.insert(LogEventParamPair("type", "popular")); paramMap.insert(LogEventParamPair("artist", "JJLin")); s_pFlurry->logEvent("music", ¶mMap);
一些插件擁有自定義方法。咱們在plugin-x中實現了一個簡單的反射。 你能夠經過名字調用自定義方法。像這樣:
// invoke setAge() method in plugin Flurry PluginParam pParam3(20); s_pFlurry->callFuncWithParam("setAge", &pParam3, NULL); // invoke logTimedEventBeginWithParams() method in plugin Flurry PluginParam event3("music-kv"); LogEventParamMap paramMap; paramMap.insert(LogEventParamPair("type", "popular")); paramMap.insert(LogEventParamPair("artist", "JJLin")); PluginParam mapValue(paramMap); s_pFlurry->callFuncWithParam("logTimedEventBeginWithParams", &event3, &mapValue, NULL);
一樣,這裏有一些反射接口定義返回基礎類型值。方法列表以下:
// return string value for developers const char* callStringFuncWithParam(const char* funcName, PluginParam* param, ...); // return int value for developers int callIntFuncWithParam(const char* funcName, PluginParam* param, ...); // return bool value for developers bool callBoolFuncWithParam(const char* funcName, PluginParam* param, ...); // return float value for developers float callFloatFuncWithParam(const char* funcName, PluginParam* param, ...);
注意:
PluginParam
指針。