版本:3.5.2

参考:

cocos文档-打包发布到原生

cocos文档-安装配置原生环境

cocos文档-原生平台JavaScript调试

cocos文档-热更新范例教程

cocos文档-热更新管理器

 

大部分设置都参考2.x的文章。

【原生】CocosCreator 原生开发环境配置(JavaSDK,Android Studio,Python,豌豆荚,真机实测、屏幕刷新率改变游戏FPS)

【原生】CocosCreator apk打包发布 (APPABI、jsc、网易易盾、权限、app名称图标、包名、签名)

【原生】CocosCreator Android和游戏的通讯 (Java和TS互相调用、传递JSON数据、监听返回键)

【原生】CocosCreator 原生 热更新(demo源码、动态热更、强更新)

【原生】CocosCreator 原生调试 (真机、模拟器、profile、手机IP)

 

3.x下测试的几点问题。

 

一 Android Studio版本必须4.1及以上版本

Android Studio下载地址

cocos3.x必须使用Android4.1以及以上版本,如果不是4.1及以上版本,用旧版android studio打开项目会没用,控制台输出一个需要更新版本的提示。

以下是官方文档跳转去下载的android版本。

 

二 Cocos模拟器输出乱码

使用模拟器时,cocos控制台中文都是乱码。找了一圈,没找到咋解决。

 

三 Cocos模拟器打开无响应

使用模拟器时,打不开游戏直接卡死了。解决方法是选择 偏好设置-预览,去掉"模拟器是否等待调试面板开启"的勾。

 

四 热更新

3.x官方提供的热更新demo和2.x基本一样,资源热更新教程

区别是

1. version_generator.js不一样的,需要复制3.x的来使用。

2. 给main.js增加搜索路径设置的逻辑和更新中断修复代码

    2.x版本是packages中加入hot-update。

    3.x版本是extensions中加入hot-update和hot-update-local-ip。

 

 

 

五  原生真机调试

在android studio点击绿色小三角运行在真机上时,在chrome浏览器输入以下地址可进行调试 (ws后为设备本地地址)

devtools://devtools/bundled/js_app.html?v8only=true&ws=192.168.10.87:6086/00010002-0003-4004-8005-000600070008

 

 

 

这个devtools地址可以从android studio的Logcat复制粘贴

 

 

 六 原生和cocos通讯

cocos发送消息

cocos中发送消息jsb.bridge.sendToNative

    /**
     * 发送消息到安卓
     * @param json 例如{cmd:"test", msg:"123"}
     */
    public sendToNative(json) {
        let str = JSON.stringify(json);
        console.log("[NativePlatform] sendToNative:", str);
        jsb.bridge.sendToNative(str);
    }

 

cocos接收消息

cocos中接收消息jsb.bridge.onNative,设置接收消息处理函数

    public constructor() {
        super();
        jsb.bridge.onNative = this.onNative;
    }

 接收到的消息处理  

    /**
     * 接收来自安卓的原生消息
     * @param str json格式字符串
     */
    public onNative(str: string) {
        let json = JSON.parse(str);
        let cmd = json.cmd;
        console.log("[NativePlatform] onNative cmd:", json.cmd);
        switch (cmd) {
            case "test":
                console.log("[NativePlatform] onNative msg:", json.msg);
                break;
        }
    }

 

原生发送消息

发送消息JsbBridge.sendToScript

    /**
     * 原生向cocos发送消息
     * @param data json格式数据
     */
    public static void sendToScript(final JSONObject data){
        String str = data.toString();
        JsbBridge.sendToScript(str);
    }

  

原生接收消息

在AppActivity.java中注册监听函数

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // DO OTHER INITIALIZATION BELOW
        SDKWrapper.shared().init(this);

        registerJsbCallBack();
    }

  

监听cocos的消息 JsbBridge.setCallback

    /**注册cocos向原生发送消息的监听*/
    public void registerJsbCallBack(){
        JsbBridge.setCallback(new JsbBridge.ICallback() {
            @Override
            public void onScript(String arg0, String arg1) {
                Log.v("v","[Android] revJsMessage:" + arg0);
                try{
                    JSONObject revObj = new JSONObject(arg0);
                    String cmd = revObj.getString("cmd");
                    switch (cmd){
                        case "test":
                            //打印收到的JS消息
                            String msg = revObj.getString("msg");
                            //给JS发送一个消息
                            JSONObject object = new JSONObject();
                            object.put("cmd","test");
                            object.put("msg","I'm Anroid");
                            AppActivity.sendToScript(object);
                            break;
                    }
                }catch (JSONException e){
                    e.printStackTrace();
                }
            }
        });
    }

  

运行后。 cocos向原生发送{cmd:"test"},原生收到后向cocos也发送一条{cmd:"test"}。

 

 七 内存泄漏检测系统

按照教程 内存泄漏检测系统 的方法

修改了引擎engine-native/cocos/base/Config.h的USE_MEMORY_LEAK_DETECTOR=1

 

 

在项目native/engine/android/CMakeLists.txt增加一行set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -finstrument-functions")

 

 

修改后运行,报错。然后没试了。

 

 

 

 

 

 

 

 

 

 

 

 

posted on 2022-10-26 10:50  gamedaybyday  阅读(425)  评论(0编辑  收藏  举报