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库里构成了重载,然后你做完移植还要看各种难受的不明不白的问题

相关推荐
qq_422828623 小时前
android图形学之SurfaceControl和Surface的关系 五
android·开发语言·python
tongyiixiaohuang4 小时前
轻易云平台助力快麦数据入库MySQL
android·数据库·mysql
JohnnyDeng948 小时前
Android 包体积优化:R8/ProGuard 深度配置
android
qq_452396238 小时前
第六篇:《JMeter逻辑控制器:循环、条件和交替执行》
android·java·jmeter
cwzqf9 小时前
Jectpack Compose项目组件代码分享(1):分页加载组件
android
@北海怪兽10 小时前
SQL常见函数整理 _ STRING_AGG()
android·数据库·sql
鹏晨互联11 小时前
【Compose vs XML:边框内外间距的实现对比】
android·xml
Android系统攻城狮11 小时前
Android tinyalsa深度解析之pcm_plugin_write调用流程与实战(一百七十九)
android·pcm·tinyalsa·android16·音频进阶·android音频进阶
ID_1800790547311 小时前
除了JSON,淘宝店铺商品API接口还支持哪些数据格式?
android·数据库