版本:3.5.2
参考:
大部分设置都参考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及以上版本
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")
修改后运行,报错。然后没试了。