cocos在android 上调试,调试Cocos2dx Android项目

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

前言

前面的Mac下用命令行将Cocos2dx游戏移植到Android平台和从CPP代码通过JNI调用Java代码两篇文章,已经把移植工作的近90%描述完成,接下来则是最重要的10%,也可能是最麻烦的部分。

没错,调试! 尤其是可恶的crash!!!

本文记录有限的一些调试经验,供参考。

看待Android的调试

已经不止一次遇到这种情况了,在iOS平台上跑得好好的游戏,为什么到Android里就各种Bug?

更惨的是Android下无法从源码级别来进行调试,只好不断重复CCLOG、编译、烧机和测试,不仅难以定位问题,而且浪费了大量时间。似乎听说现在可以调试Native Application了,坐等好消息。

个人认为,上面的这些问题通常都是在XCode里编码不严谨、资源管理不佳等原因造成的,因此严格要求自己,处理好代码中的资源管理以及警告信息,将会给移植工作省下很大的麻烦。

言归正题,准备调试吧!

调试准备

设置Android.mk和Application.mk里的编译选项,不阻止任何的警告信息,即去掉任何-W开头的设置,在编译的过程中把所有的警告信息都处理掉。

如有必要,在Application.mk中为C和CPP设置no-stack-protector编译选项:

# 去除栈保护机制

$grepno-stack-protector jni/Application.mk

# flags for both c and cpp source code

APP_CFLAGS := -fno-stack-protector

开始调试

当遇到Bug尤其crash的时候,推荐的做法是,先观察adb logcat的输出,尝试定位问题。

查看在关键操作调用前后的一些打印输出,借此定位Bug大致发生的位置, 然后通过分析源代码来尝试找到Bug。

很多时候,adb logcat的一些栈信息可读性不高,给问题的定位带来一些难度, 此时可以暂时去掉栈保护机制,使用ndk-stack命令将对应的栈信息转化为可读的函数调用信息。

# 使用ndk-stack查看logcat信息

adb -d logcat | ndk-stack -sym obj/local/armeabi/

以上的调试方式虽然效率不高,但是简单直接,也算是可行的方案。 或许将来会用到ndk-gdb,届时再来更新。

常见问题及解决点击CCScrollView里的元素时不响应点击事件

在Android上,当你按下触发一个Touch事件的时候,通常会伴随着发生Move事件,因此一个有效的解决办法是设置一个阀值。

当移动的距离绝对值低于阀值的时候,按点击事件来处理, 否则按照滑动事件来处理。JniHelper找不到要调用的Java方法

恢复编译选项

当调试完毕之后,删除禁用栈保护机制的配置选项。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值