CocosCreator 集成 AnySDK 教程

本文出自 Eddy Wiki 钠绍,轉(zhuǎn)載請(qǐng)注明出處:http://eddy.wiki/creator-anysdk.html

本文主要介紹怎么在 CocosCreator 項(xiàng)目中集成 AnySDK 。

本人開(kāi)發(fā)環(huán)境

CocosCreator 1.1.1, AnySDK 2.1.2, AnySDK_Framework_JS_Android_2.1.2, MacOS 10.10.3

Android 平臺(tái)集成 AnySDK 詳細(xì)步驟

由于本人使用 git 對(duì)項(xiàng)目進(jìn)行版本控制管理,所以下列步驟中會(huì)有一些與 git 相關(guān)的操作。如果你沒(méi)有使用 git旺坠,那么你可以直接忽略下列步驟中與 git 相關(guān)的操作疯兼。

獲取 AnySDK Framework

安裝 AnySDK 客戶(hù)端然遏,然后在 AnySDK 客戶(hù)端的【安妮市場(chǎng)】【分類(lèi)】【框架】中找到 JS(Android) 框架并下載。如下圖:


下載完成后打開(kāi) JS(Android) 框架文件夾即可看到 AnySDKFiles/Store/Frameworks/AnySDK_Framework_JS_Android_2.1.2/AnySDK_Framework_JS(Android)/ 這樣的目錄镇防。如下圖:

下文統(tǒng)一使用 AnySDK_Framework_JS(Android) 指代 AnySDK Framework 文件目錄啦鸣。

構(gòu)建并編譯 CocosCreator 項(xiàng)目

下文使用 your-proj 指代你的 CocosCreator 項(xiàng)目路徑潮饱。

修改項(xiàng)目中的 gitignore 文件来氧。

刪除 your-proj/.gitignore 文件中以下路徑:

build/

在 your-proj/.gitignore 文件中添加以下路徑:

build/jsb-default/src/
build/jsb-default/res/
build/jsb-default/publish/
build/jsb-default/simulator/

build/jsb-default/frameworks/runtime-src/proj.android/bin/
build/jsb-default/frameworks/runtime-src/proj.android/gen/
build/jsb-default/frameworks/runtime-src/proj.android/obj/
build/jsb-default/frameworks/runtime-src/proj.android/assets/

build/jsb-default/frameworks/cocos2d-x/cocos/platform/android/java/bin/
build/jsb-default/frameworks/cocos2d-x/cocos/platform/android/java/gen/

構(gòu)建發(fā)布 Android 平臺(tái)

使用 CocosCreator 打開(kāi)項(xiàng)目,點(diǎn)擊 【項(xiàng)目】【構(gòu)建發(fā)布】香拉,發(fā)布平臺(tái)選擇 “Android”啦扬, 模板選擇 “default”。然后點(diǎn)擊 “構(gòu)建”按鈕 對(duì)項(xiàng)目進(jìn)行構(gòu)建凫碌。構(gòu)建完畢會(huì)在 your-proj 目錄下生成一個(gè) build/jsb-default/ 目錄扑毡。

構(gòu)建完成后,點(diǎn)擊 “編譯”按鈕 對(duì)項(xiàng)目進(jìn)行編譯盛险,編譯過(guò)程大概20分鐘左右瞄摊。編譯完成后,安裝編譯生成的 apk 到手機(jī)上查看是否運(yùn)行正常苦掘。

如果在構(gòu)建和編譯過(guò)程中出現(xiàn)錯(cuò)誤换帜,請(qǐng)參考 CocosCreator 官方的跨平臺(tái)發(fā)布游戲文檔

注意:該步驟中的編譯操作并不是必須的鹤啡,只是為了保證你的編譯發(fā)布 Android 平臺(tái)相關(guān)開(kāi)發(fā)環(huán)境已經(jīng)配置完成惯驼。這樣在集成 AnySDK 的出現(xiàn)錯(cuò)誤的時(shí)候,就可以排除開(kāi)發(fā)環(huán)境配置相關(guān)的問(wèn)題了递瑰。

獲取 anysdk jsb 綁定文件

添加 anysdk jsb 文件

在 build/jsb-default/frameworks/cocos2d-x/ 目錄下新建 anysdk 文件夾祟牲,然后拷貝 AnySDK_Framework_JS(Android)/ 目錄下的 src 文件夾到新建的 anysdk 文件夾中。

修改 build-cfg.json 文件

在 build/jsb-default/frameworks/runtime-src/proj.android/build-cfg.json 文件中添加:

{
    "from": "../../cocos2d-x/anysdk/src",
    "to": ""
}

如下圖抖部,注意:不要遺漏了添加代碼前面分隔的逗號(hào) “,”说贝。

修改 jsb.js 文件

在 build/jsb-default/frameworks/cocos2d-x/cocos/scripting/js-bindings/script/jsb.js 文件中添加:

if  (jsb.fileUtils.isFileExist('jsb_anysdk_constants.js') || jsb.fileUtils.isFileExist('jsb_anysdk_constants.jsc')) {
    if (cc.sys.os == cc.sys.OS_IOS || cc.sys.os == cc.sys.OS_ANDROID) {
        require('jsb_anysdk_constants.js');
    }
}

if (jsb.fileUtils.isFileExist('jsb_anysdk.js') || jsb.fileUtils.isFileExist('jsb_anysdk.jsc')) {
    if (cc.sys.os == cc.sys.OS_IOS || cc.sys.os == cc.sys.OS_ANDROID) {
        require('jsb_anysdk.js');
    }
}

如下圖


拷貝anysdk framework stl庫(kù)

添加 protocols 文件

首先,查看所接入項(xiàng)目的 build/jsb-default/frameworks/runtime-src/proj.android/jni/application.mk 文件第一行找到 stl 庫(kù)類(lèi)型設(shè)置慎颗。 如下:

APP_STL := gnustl_static

然后乡恕,進(jìn)入所接入項(xiàng)目的 build/jsb-default/frameworks/runtime-src/proj.android 目錄,新建 protocols 文件夾哗总。根據(jù)上面查看到的stl類(lèi)型几颜,選取 AnySDK_Framework_JS(Android)/framework/protocols_gnustl_static/ 庫(kù),然后將該目錄下的 androidinclude 文件夾拷貝到 protocols 目錄下讯屈。

添加 libPluginProtocol.jar 文件

在 build/jsb-default/frameworks/runtime-src/proj.android/ 目錄下新建 libs 文件夾蛋哭,然后將 build/jsb-default/frameworks/runtime-src/proj.android/protocols/android 目錄下的 libPluginProtocol.jar 文件移到 libs 目錄下。

添加 res 文件

將 AnySDK_Framework_JS(Android)/framework/protocols_gnustl_static/ 目錄下的 res 文件夾涮母,拷貝到 build/jsb-default/frameworks/runtime-src/proj.android/ 目錄下谆趾,注意選擇合并躁愿,避免文件覆蓋

添加 Classes 文件

由于 CocosCreator 1.1.1 使用的是 lite 版本引擎沪蓬,所以不能使用 AnySDK_Framework_JS(Android)/3.10及以上/ 目錄下的文件彤钟。請(qǐng)下載 anysdk-files-for-ccc,然后把 anysdk-files-for-ccc/build/jsb-default/frameworks/runtime-src/Classes/ 目錄下的所有文件(除 AppDelegate.cpp 外)跷叉,拷貝到 build/jsb-default/frameworks/runtime-src/Classes 目錄下逸雹。

修改 AppDelegate.cpp 文件

在 build/jsb-default/frameworks/runtime-src/Classes/AppDelegate.cpp 文件中添加:

#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
#include "jsb_anysdk_basic_conversions.h"
#include "jsb_anysdk_protocols_auto.hpp"
#include "manualanysdkbindings.hpp"
#endif
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID || CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
    sc->addRegisterCallback(register_all_anysdk_framework);
    sc->addRegisterCallback(register_all_anysdk_manual);
#endif

如下圖


修改 Android.mk 文件

在 build/jsb-default/frameworks/runtime-src/proj.android/jni/Android.mk 文件中添加:

$(call import-add-path,$(LOCAL_PATH)/../)
../../Classes/jsb/jsb_creator_auto.cpp \
../../Classes/jsb_anysdk_basic_conversions.cpp \
../../Classes/jsb_anysdk_protocols_auto.cpp \
../../Classes/manualanysdkbindings.cpp
LOCAL_WHOLE_STATIC_LIBRARIES := PluginProtocolStatic
$(call import-module, protocols/android)

如下圖,注意:記得在 ../../Classes/AppDelegate.cpp 后添加 “\”云挟。

修改 main.cpp 文件

在 build/jsb-default/frameworks/runtime-src/proj.android/jni/hellojavascript/main.cpp 文件中添加:

#include "PluginJniHelper.h"
using namespace anysdk::framework;
JavaVM* vm;
env->GetJavaVM(&vm);
PluginJniHelper::setJavaVM(vm);

如下圖


修改 AndroidManifest.xml 文件

在 build/jsb-default/frameworks/runtime-src/proj.android/AndroidManifest.xml 文件中添加 AnySDK 所需要的權(quán)限:

    <!-- for anysdk start -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.RESTART_PACKAGES" />
    <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
    <!-- for anysdk end -->

如下圖


修改 AppActivity.java 文件

在 build/jsb-default/frameworks/runtime-src/proj.android/src/org/cocos2dx/javascript/AppActivity.java 添加:

import com.anysdk.framework.PluginWrapper;
import android.content.Intent; 
import android.os.Bundle;
PluginWrapper.init(this); // for plugins
@Override
protected void onDestroy() {
    PluginWrapper.onDestroy();
    super.onDestroy();
}

@Override
protected void onPause() {
    PluginWrapper.onPause();
    super.onPause();
}

@Override
protected void onResume() {
    PluginWrapper.onResume();
    super.onResume();
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    PluginWrapper.onActivityResult(requestCode, resultCode, data);
    super.onActivityResult(requestCode, resultCode, data);
}

@Override
protected void onNewIntent(Intent intent) {
    PluginWrapper.onNewIntent(intent);
    super.onNewIntent(intent);
}

@Override
protected void onStop() {
    PluginWrapper.onStop();
    super.onStop();
}

@Override
protected void onRestart() {
    PluginWrapper.onRestart();
    super.onRestart();
}

如下圖


在項(xiàng)目中使用AnySDK

獲取 AnySDK 參數(shù)

打開(kāi) AnySDK 客戶(hù)端梆砸,點(diǎn)擊 【打包工具】【游戲列表】【添加游戲】來(lái)在 AnySDK 客戶(hù)端添加游戲項(xiàng)目。添加成功后园欣,就可以獲取到使用 AnySDK 需要的參數(shù):appKey帖世、appSecret、privateKey沸枯。

在項(xiàng)目中添加 AnySDK 功能代碼

下面給出了我在使用 AnySDK 用過(guò)的相關(guān)功能代碼供大家參考日矫。AnySDK 具體用法請(qǐng)參考官方的客戶(hù)端接入(JS)文檔

// 初始化AnySDk
initAnySDK: function () {
    cc.log("WelcomeScreen.initAnySDK()");
    if (cc.sys.isMobile) {
        //注意:這里appKey, appSecret, privateKey绑榴,要替換成自己打包工具里面的值(登錄打包工具哪轿,游戲管理界面上顯示的那三個(gè)參數(shù))。
        var appKey = "23BEE66E-48A1-9BF0-CF4A-4DA25FF54082";
        var appSecret = "b3d0c6f406c1f7d097f2036f445589b4";
        var privateKey = "FC69F26761B6C3BEDFCDA8A2D248CC45";
        var oauthLoginServer = "http://oauth.anysdk.com/api/OauthLoginDemo/Login.php";
        var agent = anysdk.agentManager;
        //init
        agent.init(appKey, appSecret, privateKey, oauthLoginServer);
        //load
        agent.loadAllPlugins();
        
        // 開(kāi)啟統(tǒng)計(jì)
        cc.log("analytics_plugin.startSession();");
        var analytics_plugin = anysdk.agentManager.getAnalyticsPlugin();
        if (analytics_plugin) {
            analytics_plugin.startSession();
        }
        
        // 開(kāi)啟推送服務(wù)
        cc.log("push_plugin.startPush();");
        var push_plugin = anysdk.agentManager.getPushPlugin();
        if (push_plugin) {
            push_plugin.startPush();
        }
    }
},

// 顯示橫幅廣告
showBannerAd: function () {
    cc.log("WelcomeScreen.showBannerAd()");
    if (cc.sys.isMobile) {
        var ads_plugin = anysdk.agentManager.getAdsPlugin(); 
        if (ads_plugin.isAdTypeSupported(anysdk.AdsType.AD_TYPE_BANNER)) {
            ads_plugin.showAds(anysdk.AdsType.AD_TYPE_BANNER);
        } 
    }
},

// 顯示插屏廣告
showFullScreenAd: function () {
    cc.log("showFullScreenAd()");
    if (cc.sys.isMobile) {
        var ads_plugin = anysdk.agentManager.getAdsPlugin(); 
        if (ads_plugin.isAdTypeSupported(anysdk.AdsType.AD_TYPE_FULLSCREEN)) {
            ads_plugin.showAds(anysdk.AdsType.AD_TYPE_FULLSCREEN);
        } 
    }
},

// 統(tǒng)計(jì)事件
logEvent: function () {
    cc.log("logEvent()");
    if (cc.sys.isMobile) {
        var analytics_plugin = anysdk.agentManager.getAnalyticsPlugin();
        if (analytics_plugin) {
            analytics_plugin.logEvent("click_logevent_btn")
        }
    }
},

// 退出游戲
onExitBtnClicked: function () {
    cc.log("onExitBtnClicked()");
    
    // 關(guān)閉統(tǒng)計(jì)
    cc.log("analytics_plugin.stopSession();");
    if (cc.sys.isMobile) {
        var analytics_plugin = anysdk.agentManager.getAnalyticsPlugin();
        if (analytics_plugin) {
            analytics_plugin.stopSession();
        }
        // 在游戲結(jié)束或者適當(dāng)?shù)臅r(shí)候彭沼,調(diào)用unloadAllPlugins來(lái)卸載SDK插件
        anysdk.agentManager.unloadAllPlugins();
    } 
    
    cc.director.end();// 退出游戲
}

在項(xiàng)目中添加了 AnySDK 相關(guān)功能代碼后缔逛,使用 CocosCreator 編譯出 Android APK 母包。

生成渠道包

在 AnySDK 客戶(hù)端配置好游戲的渠道姓惑、SDK等參數(shù)褐奴,然后使用上一步驟編譯出來(lái)的 Android APK 母包生成集成了 SDK 的渠道包。

在這里就不詳細(xì)說(shuō)明 AnySDK 客戶(hù)端的使用了于毙,詳情請(qǐng)參考 AnySDK 的官方文檔敦冬。

如何快速集成 AnySDK

我在 GitHub 上面分享了一個(gè)便于在 CocosCreator 項(xiàng)目的 Android 平臺(tái)快速集成 AnySDK 的項(xiàng)目:anysdk-files-for-ccc 。具體使用方法請(qǐng)參考該項(xiàng)目的 README.md 文件唯沮,這里就不詳細(xì)說(shuō)明了脖旱。

總結(jié)

本文主要講解了如何在 CocosCreator 項(xiàng)目的 Android 平臺(tái)集成 AnySDK ,并提供了一個(gè)快速集成方法介蛉。ios 平臺(tái)請(qǐng)參考 AnySDK 的官方文檔自行嘗試萌庆。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市币旧,隨后出現(xiàn)的幾起案子践险,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巍虫,死亡現(xiàn)場(chǎng)離奇詭異彭则,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)占遥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)俯抖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人瓦胎,你說(shuō)我怎么就攤上這事芬萍。” “怎么了凛捏?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵担忧,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我坯癣,道長(zhǎng),這世上最難降的妖魔是什么最欠? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任示罗,我火速辦了婚禮,結(jié)果婚禮上芝硬,老公的妹妹穿的比我還像新娘蚜点。我一直安慰自己,他們只是感情好拌阴,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布绍绘。 她就那樣靜靜地躺著,像睡著了一般迟赃。 火紅的嫁衣襯著肌膚如雪陪拘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,688評(píng)論 1 305
  • 那天纤壁,我揣著相機(jī)與錄音左刽,去河邊找鬼。 笑死酌媒,一個(gè)胖子當(dāng)著我的面吹牛欠痴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播秒咨,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼喇辽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了雨席?” 一聲冷哼從身側(cè)響起菩咨,我...
    開(kāi)封第一講書(shū)人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后旦委,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體奇徒,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年缨硝,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了摩钙。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡查辩,死狀恐怖胖笛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宜岛,我是刑警寧澤长踊,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站萍倡,受9級(jí)特大地震影響身弊,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜列敲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一阱佛、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧戴而,春花似錦凑术、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至扶踊,卻和暖如春泄鹏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背姻檀。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來(lái)泰國(guó)打工命满, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人绣版。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓胶台,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親杂抽。 傳聞我的和親對(duì)象是個(gè)殘疾皇子诈唬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容