COCOS2DX4.0CPPWIN移植安卓踩坑总结

一.环境

1.androidstudio环境

a.gradle使用6.7.2,java11不然原proandroid环境需要大改

其余配置见官方文档

2.虚拟机架构和部分配置

a.cocos2dx的跨平台支持x86,armv7,v8,配置里也只能写这几个架构,最好不要用abi分架构apk(没搞懂,但是用了安装就出错)

b.命令行最好和android环境统一,jdk1.8不能用https下载

c.虚拟机的内存和存储调大点,原始安装包可能大于1g,安装包大点没事,只影响速度,没遇到资源截断

二.win原生资源转android

1.图片等:

a.AGP会把_开头资源识别为隐藏文件不会拷贝到assets里,apk会丢资源,这个改配置也不行

b.一定要检查apk里资源目录和原resource目录资源是否完全匹配(丢字体,丢阴影文件等)

2.原生代码改变

a.网络库最好用cocos2dx提供的,但是4.0讲解api相关资料少,只能看Cocos Documentation

里面有api详解(原来我写联机部分没考虑移植用windowsc网络库写,导致后面头大)

b.安卓对内存访问越界情况比较严,原来c++检查数组越界只会检测末端的几个,越界过3项目甚至还能跑,但是安卓会立即崩溃

b1.对象切片问题:创建子类,用父类指针接收,需要时根据标识转子类,报错空指针:

解决:

1.将子类成员(我的子类大多是用于区分接口,拓展功能,成员变量少)移动至父类,初始化修改-->修改代码少,不影响逻辑(还有部分修改为static_cast<>())

2.vector尽量存指针而不是变量,深拷贝转浅拷贝修改析构

c.及时添加CCLOG,不像visualstudio,调试报错部分会在出错代码停下,androidstudio只会扔给你adb,往往最后看到的是:mp3播放后3秒崩溃,但你加了不少定时器,是哪个不知道,CCLOG能帮你看1,哪个出错 2.流程完成情况,值是多少

d.相对路径的fopen可以不用改,这种方式直接访问apk里的bin文件等也行,cocos2dx的文件接口不是必须

e.着色器,最头疼的一个,windows平台能运行的GL版本在安卓上不能运,用1.0版本

f.控制:键盘检测,滚轮等改为拖拽和按键(正常不改只能检测点击)

g.初始化和销毁:总觉得win和android平台变量生命周期不同,这应该也是我这销毁顺序不同原因,例子:我poke原每回合定时器结束清除,但是移植后延迟清除导致poke累计几回合的卡牌,另一处则清除太快导致访问空指针

h.Android 平台上,setString() 更新中文后,Label 的 contentSize 可能不会自动更新!

这是 Cocos2d-x 在 Android 上的一个已知问题。解决方案是:强制刷新 Label 的 contentSize。

i.你的在visualstudio上加的给vs编译器看的宏(包括链接器)都要改,比如#pragram (set-utf8)到了androidstudio里还是gbk,你的中文字符在标签显示上要么不显示要么乱码

三.其他

1.及时备份!阶段性移植,不要想着一次性搞完

2.ai不可靠,如果你的项目和我一样几乎每个文件都大于7000行,ai是跳读的,几乎不可能理解完整的游戏逻辑,给你成功的修改的可能就像猴子敲代码,最好只用ai给你配置环境和整理错误点,做脚本,被坑了多次,它甚至敢给你在回合还没结束就清理资源

3.androidstudio中,如果你改了gradle或者resource那需要清理./gradlew clean,如果只改了classes,只要点运行就行,会执行包括拷贝新资源的动作

4.adb:& "env:USERPROFILE\\AppData\\Local\\Android\\Sdk\\platform-tools\\adb.exe" logcat -c看adb最好在开始时手动清空 \& "env:USERPROFILE\AppData\Local\Android\Sdk\platform-tools\adb.exe" logcat | Select-String -Pattern "org.cocos2dx.hello|libc|DEBUG|AndroidRuntime|FATAL|backtrace|signal" -Encoding unicode实时检测。如果给ai分析直接复制你看到崩溃的那部分给他

5.学习其他引擎,cocos2dx4.0坑太多了,关键最新版本用的人少,坑还没人踩,就比如一个函数里写两个动画会崩溃,还有部分api和windows库里构成了重载,然后你做完移植还要看各种难受的不明不白的问题

相关推荐
千里马学框架1 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台1 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone1 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
致远ccc1 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
ttyyttemo1 天前
Kotlin 协程中的 Job 结构化并发与取消
android
sun0077001 天前
tbox 4g/5g切换,导致wan ip 改变,导致车机旧网络不可用。需要重启车机才行
android
其实防守也摸鱼1 天前
内网穿透与反向代理:原理、工具与实战指南
android·大数据·运维·安全·网络安全·自动化·渗透
AFinalStone1 天前
Android7 SystemUI 源码解析(四)NavigationBar 导航栏与 SystemBars
android·systemui
JMchen1 天前
属性动画原理与高级动画实现
android·kotlin·canvas
AFinalStone1 天前
Android7 SystemUI 源码解析(二)启动流程深度解析
android·systemui