本文出自 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ù),然后將該目錄下的 android
和 include
文件夾拷貝到 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 的官方文檔自行嘗試萌庆。