http://cn.cocos2d-x.org/tutorial/show?id=1836javascript
國內居高不下的安卓手機佔有率以及不斷提高的回報率,使得安卓市場已成爲遊戲研發商沒法忽視的淘金熱土。然而,上百個渠道的SDK接入令遊戲公司大呼「傷不起」,各類渠道、用戶、支付、廣告、統計、分享等SDK接入費時費事、犧牲掉大量的時間機會,遊戲公司須要面對文檔上語焉不詳的各類技術坑、聯調坑。咱們一邊讀着如何深耕300個安卓渠道獲利的案例望梅止渴,一邊卻須要花費三個月甚至半年的時間去作SDK接入。php
本文以Cocos2d-JS項目做爲示例,講解如何集成AnySDK-JS。css
經過Cocos Code IDE建立一個Cocos JavaScript項目anysdkTest。java
打開Cocos Code IDE,點擊File->New->Cocos JavaScript Project
;android
記得勾選在Add Native Code
項。 點擊Finish
完成項目建立。接下來進入咱們的主題,集成AnySDK-js。git
參考anysdk-js快速集成指南github
首先,我須要下載anysdk框架包。下載地址:http://www.anysdk.com/downloadsjson
選擇AnySDK Framework for JS下載。api
將下載下來的AnySDK_Framework_JS.zip文件解壓,目錄以下:微信
其中framework目錄下,有三個版本的stl庫。根據當前項目使用的stl庫選取相應的stl庫。
1
2
3
|
以Cocos2d-x框架爲例,開發者能夠在工程目錄下jni/application.mk文件第一行找到stl庫類型設置
若是此處設置的是 APP_STL := gnustl_static,則表示當前工程以gnu靜態庫的方式引入使用stl標準庫,此時應選擇集成protocols_gnustl_static這個文件夾中的框架資源。
反之,則應選擇集成 protocols_stlport_static文件夾中的框架資源。
|
下載AnySDK Framework for JS包後,解壓,會有兩個2.x和3.x的包,根據使用的Cocos2d-js的版本,來選擇相應的綁定文件。 src下面則是一個anysdkConst.js文件,該文件是對應C++裏面定義的枚舉變量。(使用的時候,須要添加到project.json裏面)
1
2
3
4
5
|
"jsList"
: [
"src/resource.js"
,
"src/anysdkConst.js"
,
"src/app.js"
]
|
由於咱們是使用Cocos2d-JS 3.x建立的項目,全部咱們選擇3.x的目錄。
拷貝anysdk framework stl庫到protocols文件夾
首先,查看anysdkTest項目的frameworks/runtime-src/proj.android/jni/application.mk
文件第一行找到stl庫類型設置。 以下圖:
而後,進入anysdkTest項目的frameworks/runtime-src/proj.android
目錄,新建protocols文件夾。根據上面查看到的stl類型,選取AnySDK_Framework_JS/framework/protocols_gnustl_static
庫,而後將該目錄下的android和include文件夾拷貝到protocols目錄。
將AnySDK_Framework_JS/framework/protocols_gnustl_static
目錄下的res文件,拷貝到proj.android/res
目錄下,注意選擇合併,避免文件覆蓋。
將AnySDK_Framework_JS/3.x
目錄下的文件拷貝到proj.android/Classes
目錄下
編輯proj.android/jni/Android.mk
文件
在LOCAL_SRC_FILES新增 兩個文件: autoanysdkbindings.cpp 和 manualanysdkbindings.cpp,例:
1
2
3
4
5
6
7
8
9
|
LOCAL_SRC_FILES := \
../../Classes/protobuf-lite/google/protobuf/io/coded_stream.cc \
...
../../Classes/autoanysdkbindings.cpp \
../../Classes/manualanysdkbindings.cpp \
javascript/Runtime_android.cpp \
javascript/main.cpp
|
在LOCAL_C_INCLUDES 新增目錄:protocols/android 和 protocols/include,例:
1
2
3
4
5
6
|
LOCAL_C_INCLUDES := \
$(LOCAL_PATH)/../../Classes/runtime \
$(LOCAL_PATH)/../../Classes/protobuf-lite \
$(LOCAL_PATH)/../protocols/android \
$(LOCAL_PATH)/../protocols/include \
$(LOCAL_PATH)/../../Classes
|
新增 static lib, 例:
1
|
LOCAL_WHOLE_STATIC_LIBRARIES += PluginProtocolStatic
|
新增 modules, 例:
1
|
$(call import-module,protocols/android)
|
增長ADK_MODULE_PATH:
3.x, 修改 build-cfg.json文件(也就是加上: "" ):
1
2
3
4
5
6
7
8
|
"ndk_module_path"
:[
"../../js-bindings"
,
"../../js-bindings/external"
,
"../../js-bindings/cocos2d-x"
,
"../../js-bindings/cocos2d-x/cocos"
,
"../../js-bindings/cocos2d-x/external"
,
""
],
|
在proj.android目錄下新建libs文件夾,而後將AnySDK_Framework_JS/framework/protocols_gnustl_static/android
目錄下的libPluginProtocol.jar拷貝到該目錄下。
添加設置javaVM代碼
編輯proj.android/jni/javascript/main.cpp
文件。如圖:
配置AndroidManifest.xml 添加框架須要的權限
1
2
3
4
5
|
<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"
/>
|
在JAVA層初始化AnySDK Framework框架
首先找到遊戲工程的主Activity,以Cocos2d-x引擎遊戲爲例,主Activity便是繼承了cocos2dxActivity的Activity。 並在主Activity的onCreate()方法中新增以下代碼來初始化AnySDK Framework:修改proj.android/src/org/cocos2dx/javascript/AppActivity.java
文件。
1
2
3
4
5
6
7
8
|
import com.anysdk.framework.PluginWrapper;
public
class
MainActivity extends Activity{
protected
void
onCreate(Bundle savedState)
{
super.onCreate(savedState);
PluginWrapper.init(
this
);
// for plugins
}
|
重寫Activity生命週期相關方法,代碼以下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
@Override
protected
void
onActivityResult(
int
requestCode,
int
resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
PluginWrapper.onActivityResult(requestCode, resultCode, data);
}
@Override
protected
void
onResume() {
super.onResume();
PluginWrapper.onResume();
}
@Override
public
void
onPause(){
PluginWrapper.onPause();
super.onPause();
}
@Override
protected
void
onNewIntent(Intent intent) {
PluginWrapper.onNewIntent(intent);
super.onNewIntent(intent);
}
|
修改runtime-src/Classes
下的AppDelegate.cpp文件
在 sc->start(); 這一行以前 新增:
1
2
|
sc->addRegisterCallback(register_all_autoanysdkbindings);
sc->addRegisterCallback(register_all_anysdk_manual);
|
並引用對應的頭文件:
1
2
|
#include "jsb_anysdk_auto.hpp"
#include "jsb_anysdk_manual.hpp"
|
修改結果如圖:
在完成anysdk的集成後,咱們須要爲anysdk進行一些配,遊戲管理、渠道、sdk管理等!
請開發者訪問 AnySDK下載頁面下載 AnySDK開發組件
已有帳號的直接登陸,沒有的點擊註冊。(能夠直接使用Cocoa china的帳號)
在此我添加了一個名叫test的遊戲做爲演示示例。
在渠道管理界面咱們能夠爲咱們的遊戲配置發佈渠道,如圖中的渠道列表:選取所需的渠道。
此處我選取了官網渠道。
你能夠根據本身的項目需求,選取添加渠道。
配置好渠道後,咱們接下來爲該渠道增長SDK。能夠在右側的SDK分類列表選取所須要添加的SDK,如用戶,廣告,支付,分享,統計。
此處,選取了友盟推送和統計,及shareSDK的新浪微博分享!
你能夠根據本身的項目需求,選取添加SDK。
添加好SDK,咱們須要爲所添加的sdk配置參數。
如上圖,在SDK列表選中SDK,而後在右側的參數配置區配置參數。這些參數須要到各SDK的網站去申請。 好比: umeng,shareSDK。 在sdk網站上完成應用註冊後,將獲取到的appkey等信息,填入上圖右側的參數配置區。
AnySDK集成完成後,和AnySDK配置好後,咱們來編寫代碼,使用咱們要集成的SDK。 讓咱們回到咱們的app.js文件。
在app.js文件的合適位置加入下面代碼,初始化anysdk。appKey等參數來自下圖中紅色區域
1
2
3
4
|
var appKey =
"EDAB0B5C-81FD-7718-0484-D861196DA227"
;
var appSecret =
"76d97fcf7ef02e2e6aa487ab5821c0ca"
;
var privateKey =
"6ECF2C672E23435D637383C59851E363"
;
|
首先要load plugin:
1
|
agent.loadALLPlugin();
|
獲取各個插件:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
agent = anysdk.AgentManager.getInstance();
// init
agent.init(appKey,appSecret,privateKey,oauthLoginServer);
// load
agent.loadALLPlugin();
// get plugins
user_plugin = agent.getUserPlugin();
iap_plugin = agent.getIAPPlugin();
share_plugin = agent.getSharePlugin();
ads_plugin = agent.getAdsPlugin();
social_plugin = agent.getSocialPlugin();
push_plugin = agent.getPushPlugin();
analytics_plugin = agent.getAnalyticsPlugin();
|
使用插件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
onShareAction:function(idx){
if
(share_plugin == null) {
cc.
log
(
"share plugin was not loaded."
);
return
;
}
switch
(idx){
case
share_operation.share:{
var info = {
title :
"ShareSDK是一個神奇的SDK"
,
site :
"ShareSDK"
,
text :
"ShareSDK集成了簡單、支持如微信、新浪微博、騰訊微博等社交平臺"
,
comment :
"無"
,
}
cc.
log
(
"share info:"
+info+
", "
+info[
"site"
]);
share_plugin.share(info)
//1
cc.
log
(
"will log event"
);
analytics_plugin.logEvent(
"share"
)
//2
}
break
;
}
}
|
詳細的能夠查看app.js。也能夠AnySDK使用幫助。
參考 AnySDK Framework 2.0.0版本在cocos2d-x js中,支付、分享、廣告等系統使用的各個接口。 http://docs.anysdk.com/IapsystemJS
在完成AnySDK framework的集成,AnySDK 參數申請配置及sdk插件的使用代碼的添加後。一切就緒,咱們就可使用AnySDK打包工具進行打包了。
在打包以前,咱們得先生成母包。母包就是咱們集成了AnySDK framework和插件使用的Cocos2d-JS項目的Android平臺的apk。
先生成母包
使用Cocos命令進行打包,操做以下:
1
2
|
IvenYangtekiMacBook-Pro-2:~ zeroyang$ cd /Users/zeroyang/Documents/cocos/anysdkTest
IvenYangtekiMacBook-Pro-2:anysdkTest zeroyang$ cocos compile -p android -m release
|
先打開終端,而後cd進入項目根目錄,輸入cocos compile -p android -m release
回車進行打包。
打包好後,能夠將測試手機經過USB鏈接到電腦,點擊安裝,將打包好的遊戲安裝到手機上。
圖1:
圖1是運行的測試界面。點擊各菜單按鈕使用各SDK插件。 若是沒有打包該插件SDK,插件會加載失敗。例如:咱們能夠在控制檯看到以下信息:
1
|
user plugin was not loaded.
|
圖2:
圖2是點擊分享菜單後,彈出新浪微博分享按鈕。由於咱們添加了shareSDk和新浪微博的分享代碼。 點擊分享按鈕,能夠打開新浪微博分享界面分享消息。
咱們前面添加了友盟的統計SDK,並自定義了分享事件analytics_plugin.logEvent("share")
。咱們打開友盟的應用統計管理網頁能夠查看到統計信息。
本文講解了,Cocos2d-JS如何集成AnySDK。包含Cocos-JS項目的建立,AnySDK framework的集成,渠道和SDK參數配置申請、SDK使用及打包。 開發者能夠結合自身項目靈活選擇,增減渠道,SDK打包。經過使用AnySDK你能夠快速的開發出各個渠道的發佈包。