cocos2d-x 3.0 beta工程设置cdt调试

             cocos2d-x 3.0 beta建立的工程proj.android不可以调试,自己动手丰衣足食吧,在此记一下解决过程

安装cdt插件

         先切到eclipse根目录查看eclipse版本,这里
cd ~/Document/and_tools/adt-bundle-mac-x86_64-20131030/eclipse/
cat .eclipseproduct
看到version=4.2.0
cdt地址 http://www.eclipse.org/cdt/downloads.php选择对应的cdt版本安装
help-》Install new Software点击add如图

如果因为gfw抽风了的话,手动下载zip包点Archive浏览安装。。。

转换cdt工程

新建并打开一个工程MyGame, 选择工程右键-》Android Tools-》Add Native Support    本来当如此,可用cocos2d-x 3.0 beta新建的工程愣是没看到“ Add Native Support”。。。。,老版本是绝对可以看到的。。。
无奈之下,只能用猥琐一点的办法了。。。试试能用。
先试试能不能运行,若Run as-》Android Application出现以下错误

[2014-03-24 11:25:12 - Dex Loader] Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.

[2014-03-24 11:25:12 - MyGame555] Conversion to Dalvik format failed: Unable to execute dex: java.nio.BufferOverflowException. Check the Eclipse log for stack trace.

             解决办法1:工程右键-》Property-》Project Build Target选更高的API Level
             解决办法2:window-》Android Sdk Manager-》Tools里卸载高版本的build-tools安装18.1.1版本的build-tools

使用比较工具将cocos2dx 2.2版本旧工程proj.android/.project和MyGame的proj.android/.project作比较,可以看到2.2工程多出一个cdt builder配置。
在MyGame工程proj.android/.project里添加cdt builder字段
		<buildCommand>
			<name>org.eclipse.cdt.managedbuilder.core.genmakebuilder</name>
			<triggers>clean,full,incremental,</triggers>
			<arguments>
				<dictionary>
					<key>?name?</key>
					<value></value>
				</dictionary>
				<dictionary>
					<key>org.eclipse.cdt.make.core.append_environment</key>
					<value>true</value>
				</dictionary>
				<dictionary>
					<key>org.eclipse.cdt.make.core.autoBuildTarget</key>
					<value>all</value>
				</dictionary>
				<dictionary>
					<key>org.eclipse.cdt.make.core.buildArguments</key>
					<value>-C ${ProjDirPath} NDK_MODULE_PATH=${COCOS2DX_ROOT}:${COCOS2DX_ROOT}/cocos2dx/platform/third_party/android/prebuilt -j2</value>
				</dictionary>
				<dictionary>
					<key>org.eclipse.cdt.make.core.buildCommand</key>
					<value>${ProjDirPath}/ANDROID_NDK/ndk-build</value>
				</dictionary>
				<dictionary>
					<key>org.eclipse.cdt.make.core.cleanBuildTarget</key>
					<value>clean</value>
				</dictionary>
				<dictionary>
					<key>org.eclipse.cdt.make.core.contents</key>
					<value>org.eclipse.cdt.make.core.activeConfigSettings</value>
				</dictionary>
				<dictionary>
					<key>org.eclipse.cdt.make.core.enableAutoBuild</key>
					<value>false</value>
				</dictionary>
				<dictionary>
					<key>org.eclipse.cdt.make.core.enableCleanBuild</key>
					<value>true</value>
				</dictionary>
				<dictionary>
					<key>org.eclipse.cdt.make.core.enableFullBuild</key>
					<value>true</value>
				</dictionary>
				<dictionary>
					<key>org.eclipse.cdt.make.core.fullBuildTarget</key>
					<value>all</value>
				</dictionary>
				<dictionary>
					<key>org.eclipse.cdt.make.core.stopOnError</key>
					<value>true</value>
				</dictionary>
				<dictionary>
					<key>org.eclipse.cdt.make.core.useDefaultBuildCmd</key>
					<value>false</value>
				</dictionary>
			</arguments>
		</buildCommand>
选中工程F5刷新,工程右键-》Property-》Builder可以看到多了个cdt builder,将cdt builder移到最上





File-》New-》other-》C/C++->Convert to C/C++ Project 点Next,设置如图
点击 finish转换成功

代码编译

快捷键command+B进行编译,报如下错误

jni/Android.mk:22: *** Android NDK: Aborting.    .  Stop.

Android NDK: jni/Android.mk: Cannot find module with tag '2d' in import path    

Android NDK: Are you sure your NDK_MODULE_PATH variable is properly defined ? 

没找到路径就自己加,在jni/Android.mk里添加如下字段

COCOS2DX:=$(LOCAL_PATH)/../../cocos2d
$(call import-add-path, $(COCOS2DX)/cocos)
$(call import-add-path, $(COCOS2DX)/external)
再次编译,出现一堆错误(不能马上终止编译差评)

jni/../../cocos2d/cocos/2d/CCEventListenerTouch.h:78:48: error: expected ';' at end of member declaration

jni/../../cocos2d/cocos/2d/CCEventListenerTouch.h:78:50: error: 'override' does not name a type

jni/../../cocos2d/cocos/2d/CCEventListenerTouch.h:79:33: error: expected ';' at end of member declaration

jni/../../cocos2d/cocos/2d/CCEventListenerTouch.h:79:35: error: 'override' does not name a type

仔细看看都是c++ 11里新加的“关键字”,显然没添加编译参数std=c++11,查看jni/Application.mk

APP_CPPFLAGS := -frtti -DCC_ENABLE_CHIPMUNK_INTEGRATION=1 -DCOCOS2D_DEBUG=1 -std=c++11 -fsigned-char已添加-std=c++11

再查看 jni/../../cocos2d/cocos/2d/没有 Application.mk。新建jni/../../cocos2d/cocos/2d/ Application.mk也许能解决。。。,不过先参考一下

build_native.py怎么做比较好。查看build_native.py看到如下注释

'''Because ndk-r8e uses gcc4.6 as default. gcc4.6 doesn't support c++11. So we should select gcc4.7 when
 54     using ndk-r8e. But gcc4.7 is removed in ndk-r9, so we should determine whether gcc4.7 exist.
 55     Conclution:
 56     ndk-r8e  -> use gcc4.7
 57     ndk-r9   -> use gcc4.8
在jni/Application.mk里添加字段

NDK_TOOLCHAIN_VERSION = 4.8

重新编译成功

C/C++基本配置

再做一些基本配置,工程右键-》property-》C/C++ Build

修改Default编译配置,Build command改成ndk-build -j4加快编译速度


再新建一个debug编译配置

Manage Configurations-》New-》对话框里添加新配置debug


修改Debug编译配置,Build command改成ndk-build NDK_DEBUG=1 -j4


修改AndroidManifest.xml-》Application-》Debuggable为true

调试

手机开调试,右键Debug As-》Android Native Application
             若出现如下错误

[2014-03-24 15:17:18 - MyGame888] Unknown Application ABI: 

[2014-03-24 15:17:18 - MyGame888] WARNING:

[2014-03-24 15:17:18 - MyGame888] Unknown Application ABI: 

[2014-03-24 15:17:18 - MyGame888] APP_PLATFORM

[2014-03-24 15:17:18 - MyGame888] Unknown Application ABI: 

[2014-03-24 15:17:18 - MyGame888] android-19

[2014-03-24 15:17:18 - MyGame888] Unknown Application ABI: 

[2014-03-24 15:17:18 - MyGame888] is

[2014-03-24 15:17:18 - MyGame888] Unknown Application ABI: 

[2014-03-24 15:17:18 - MyGame888] larger

[2014-03-24 15:17:18 - MyGame888] Unknown Application ABI: 

[2014-03-24 15:17:18 - MyGame888] than

[2014-03-24 15:17:18 - MyGame888] Unknown Application ABI: 

[2014-03-24 15:17:18 - MyGame888] android:minSdkVersion

[2014-03-24 15:17:18 - MyGame888] Unknown Application ABI: 

[2014-03-24 15:17:18 - MyGame888] 9

解决办法:修改AndroidManifest.xml-》AndroidManifest.xml  < uses-sdk android:minSdkVersion = "19" />

             曾经出现如下错误

[2014-03-24 15:25:11 - MyGame888] gdbserver output:

[2014-03-24 15:25:11 - MyGame888] run-as: Package 'com.MyCompany.AwesomeGame' is unknown


[2014-03-24 15:25:11 - MyGame888] Verify if the application was built with NDK_DEBUG=1

[2014-03-24 15:48:22 - MyGame888] gdbserver output:

[2014-03-24 15:48:22 - MyGame888] run-as: Package 'com.MyCompany.AwesomeGame' is unknown


[2014-03-24 15:48:22 - MyGame888] Verify if the application was built with NDK_DEBUG=1

             解决办法:更换数据线和手机

             若跳出如下对话框则可能是数据线松了,也可能是AndroidManifest.xml里Debuggable为false
            
弹出如下对话框就表示可以正常调试了

因为源码都要放在jni/../Classes里,就这样调试只能看jni里的main.cpp。。。
删除工程里原有的source链接:Classes,cocos2dx
建立新的source链接
工程右键-》Property-》C/C++ General->Paths and Symbols->Cource Location
点击Link Folder按钮,如图添加一个Classes链接,Browse浏览找到选择Classes文件夹

同理添加cocos2dx source链接

HelloWorldScence类的 HelloWorld::menuCloseCallback里添加断点(由于cdt调试环境建立起来时,调试器已经跳过很多初始化代码
所以不要在AppDelegate之类的class里加断点,不会有效的)
最后断点如图



终于可以调试了,但这并不代表build_native.py没有用处了,assets资源还是要copy的
修改build_native.py定位到函数build注释掉153行
            if build_mode is None:
149           build_mode = 'debug'
150     elif build_mode != 'release':
151         build_mode = 'debug'
152    
153#do_build(cocos_root, ndk_root, app_android_root,ndk_build_param,sdk_root,android_platform,build_mode)
154 

总结一下,android真机调试真的很慢,但利用调试能定位crash实在太幸福了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值