cocos2djs游戏android sdk接入

cocos2djs游戏sdk接入


主要登陆接口和支付接口(一般认真的跟着接入文档走  基本没什么问题  但是细节上会有一些区别和误区)



1.首先从sdk官网或运营获得参数 sdk包  以及sdk接入文档(一般在sdk包里面,有的文档在网站上)

2.跟着文档将资源拷贝到工作空间到如jar包资源等文件  有的直接作为library导入到项目工程里
拷贝资源 注意:

(1)如果有assets 里面的文件需要拷贝  由于cocos run命令会自动重新生成文件  主要根据build-cfg.json配置文件生成的那么  把你需要拷贝的文件加在一个你知道的相对路径
再修改配置如下
{
    "ndk_module_path" :[
        "../../js-bindings",
        "../../js-bindings/cocos2d-x",
        "../../js-bindings/cocos2d-x/cocos",
        "../../js-bindings/cocos2d-x/external"
    ],
    "copy_resources": [
        {
            "from": "../../../src",
            "to": "src"
        },
        {
            "from": "../../../res",
            "to": "res"
        },
        {
            "from": "../../../main.js",
            "to": ""
        },
        {
            "from": "../../../project.json",
            "to": ""
        },
        {
            "from": "../../js-bindings/bindings/script",
            "to": "script"
        },
        {
            "from": "你的路径",
            "to": ""
        }

        {
            "from": "你的路径",
            "to": ""
        }
    ]
}






(2)如果libs的armeabi 和armeabi-v7a文件夹下需要添加库文件  但是也会被cocos run命令 覆盖  
解决办法:
比如要加的文件为ibweibosdkcore.so
先把文件放入jni文件夹,再修改jni下的android.mk文件
LOCAL_PATH := $(call my-dir)
# ———————————
include $(CLEAR_VARS)  
LOCAL_MODULE :=weibosdkcore  
LOCAL_SRC_FILES := libweibosdkcore.so
include $(PREBUILT_SHARED_LIBRARY)  
# ———————————
include $(CLEAR_VARS)

LOCAL_MODULE := cocos2djs_shared

LOCAL_MODULE_FILENAME := libcocos2djs

LOCAL_SRC_FILES := hellojavascript/main.cpp \
    ../../Classes/AppDelegate.cpp 

LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes

LOCAL_STATIC_LIBRARIES := cocos_jsb_static

LOCAL_EXPORT_CFLAGS := -DCOCOS2D_DEBUG=2 -DCOCOS2D_JAVASCRIPT



include $(BUILD_SHARED_LIBRARY)



$(call import-module,bindings)




(3)为了全部手机适配测试很多手机时,我们注意到一个问题同样的包,只能在部分手机上运行,有的手机老是崩溃,于是查找问题,
运行游戏打log输出是发现 程序找不到armeabi-v7a 的libcocos2djs.so文件
然后就去文件夹找  果然没有   最后找到解决办法
修改jni的Application.mk文件
APP_STL := gnustl_static

# Uncomment this line to compile to armeabi-v7a, your application will run faster but support less devices
APP_ABI := armeabi armeabi-v7a(增加内容armeabi-v7a

APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -std=c++11 -fsigned-char
APP_LDFLAGS := -latomic

ifeq ($(NDK_DEBUG),1)
  APP_CPPFLAGS += -DCOCOS2D_DEBUG=1
  APP_OPTIM := debug
else
  APP_CPPFLAGS += -DNDEBUG
  APP_OPTIM := release
endif
结果在运行  完美运行

后来又发现一个崩溃问题  程序找不到arm64-v8a mips mips64 x86等等的libcocos2djs.so文件
我以为用原来的方法可以解决  结果  cocos run 一运行  就报错  。。。。。。。
最后 无赖解决办法   直接删除了除了arm64-v8a mips mips64 x86等等文件夹
写了好久的sdk接入代码   终于可以试试  能不能行了



3.接下来是代码部分
(1)AndroidManifest.xml的配置

一般情况下  配置参数  如appid key等等  每个sdk不一样

特别有的sdk  需要修改启动类为sdk的闪屏类  就要注意把自己的启动类配置删除了  要不然你装在手机上就会有两个图标或者你添加了多少个下面这样的代码就会有多少个app图标装在手机上
        android:name="android.intent.action.MAIN"/>
        android:name="android.intent.category.LAUNCHER"/>

(2)js和java互相调用

js->java
jsb.reflection.callStaticMethod("java类文件src下完整路径","方法名","(数据类型列表)V" ,
    参数1,参数2,...);
 
   
列:
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/TaoSY/staticTaoSYSDK","login","(ZFILjava/lang/String;)V" ,
    true,1.2,1,"参数");

java类文件全路径:src一下全部路径最后一个是java文件名如
staticTaoSYSDK.java
方法名:不解释
 
   
数据类型列表
 
   
 
   
数据类型
数据类型 int float string bool    
表示方式 I F
Ljava/lang/String;
Z    

 
   
注意 :1.没有参数也要传一个  "()V"     2.类型列表的类型之间不需要分隔符


java->js


1.先将sdk回调监听到的数据转换成json

                           JSONObject jsonObject = new JSONObject(var1);

                           String data = jsonObject.toString();
2.再讲数据发送到自己的js里面

        String arg = String.format("bs.SDKManager.getInstance().onLoginEvent("+data+")");

        Cocos2dxJavascriptJavaBridge.evalString(arg);


注意:Cocos2dxJavascriptJavaBridge 一定要在GL线程中执行

Activity.runOnGLThread(new Runnable() {

              @Override

             public void run() {

                 Cocos2dxJavascriptJavaBridge.evalString(event);

            }

        });


2.再讲数据发送到自己的js里面

(3)接入各种sdk接口 以及sdk各种监听

这个时候我遇到的问题有

安卓退出键调用问题



    @Override
    public boolean dispatchKeyEvent(KeyEvent event) {
            if (event.getKeyCode() == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN && event.getRepeatCount() == 0) {                       
// TODO 简单的安卓是否退出询问界面
AlertDialog.Builder builder = new Builder(SDKManager.getContext());  
builder.setMessage("确定要退出吗?");  
        builder.setTitle("提示");  
        builder.setPositiveButton("确认",  
        new android.content.DialogInterface.OnClickListener() {  
                @Override  
                public void onClick(DialogInterface dialog, int which) {  
                dialog.dismiss();  
        String arg = String.format("cc.director.end()");
            SDKManager.dispatchEvent(arg);
            }  
        });  

    //也可以在此处调用sdk的退出接口(如果sdk只有接口没有界面的话)
            }
            else
            {
                return super.dispatchKeyEvent(event);

//不要忽略这个  网上很多地方只有说怎么调用安卓退出键  却忽略了 调用父类  以至于 玩游戏时监听不到音量控制键了
            }

            return true;
    }

   切换账号接口

这里的问题是  切换账号一定要先给自己的服务器发消息  退出自己的游戏然后在执行sdk重新登陆


4











你可能感兴趣的:(sdk,cocos2d,游戏开发)