使用eclipse调试cocos2d-x Native C++ 代码

来源:互联网 发布:mac 中 ppt设置金色 编辑:程序博客网 时间:2024/05/12 05:29

导入cocos2d-x目录下的示例游戏

这里我以cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame这个自带的小游戏为例子来说明一下.

假设你的eclipse是干净的,也就是左边的Package Explorer栏是空空的

  1. 导入libcocos2d-x到eclipse,右击Package Explorer空白区域,Import->Existing Android Code Into Workspace,然后在下一个窗口的Root Directory那里定位到cocos2d-2.1rc0-x-2.1.3/cocos2dx/platform/android/java这个目录,选中libcocos2dx,导入
  2. 按照上面的方法导入cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame/proj.android
  3. 现在eclipse里已经有了两个项目:libcocos2dx,SimpleGame

设置使用ndk-build来编译


因为我们不使用build-native.sh来编译,所以要先把资源文件得到在android项目的assets下,具体就是把cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame/Resources下面的所有文件复制到cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame/proj.android/assets下面去


准备工作完毕

  1. 在eclipse的Package Explorer里右击SimpleGame项目,选”Properties”,打开项目属性框
  2. 按下面设置Tool Chain Editor 
  3. 再设置ndk-build的命令,为 ndk-build NDK_DEBUG=1,确定,关闭对话框 
  4. 这个时候,你选择Project->Build All,会出现错误,意思是NDK_MODULE_PATH设置不对 
  5. 这里我们不设置NDK_MODULE_PATH,因为设置了它会让我们无法调试C++代码,解决上面问题的办法是:把编译过程中需要的库拷贝到系统默认的NDK_MODULE_PATH里,跟我来做
  6. 复制cocos2d-2.1rc0-x-2.1.3目录下的cocos2dx,CocosDenshion,extensions,external这4个目录到你的NDK的sources目录下,以我的电脑为例,就是/android/android-ndk-r8e/sources
  7. 复制cocos2d-2.1rc0-x-2.1.3/cocos2dx/platform/third_party/android/prebuilt目录的所有到NDK的sources目录下
  8. 这样我们复制到NDK的sources目录下的目录一共有cocos2dx,CocosDenshion,extensions,external, libcurl,libjpeg,libpng,libtiff,libwebp这几个
  9. 回到eclipse,再次Project->Build All,应该会编译成功

修改项目文件结构,以使cdt可以识别我们的C++文件

为了可以给C++下断点,我们必须修改一下当前的项目文件结构

  1. 移动cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame/Classes目录到cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame/proj.android/jni下面
  2. 修改cocos2d-2.1rc0-x-2.1.3/samples/Cpp/SimpleGame/proj.android/jni下面的Android.mk,把原来的

Android.mk中:

LOCAL_SRC_FILES := hellocpp/main.cpp \            ../../Classes/AppDelegate.cpp \           ../../Classes/HelloWorldScene.cpp \            ../../Classes/GameOverScene.cpp                       LOCAL_C_INCLUDES := $(LOCAL_PATH)/../../Classes 

修改为

LOCAL_SRC_FILES := hellocpp/main.cpp \               Classes/AppDelegate.cpp \               Classes/HelloWorldScene.cpp \                Classes/GameOverScene.cppLOCAL_C_INCLUDES := $(LOCAL_PATH)/Classes    

也就是使文件指向正确的位置

Project->Build ALL 编译项目,应该可以成功编译

调试

  1. 我们给Classes目录下的HelloWorldScene.cpp文件里的ccTouchesEnd方法下一个断点,这样游戏运行后,点击屏幕应该可以触发我们的断点 
  2. 把手机连接到电脑上,右击SimpleGame, 选 Debug As->Android Native Application
  3. 如果需要选择手机,选你想调试的
  4. 游戏运行起来后,触摸屏幕,可以看到

eclipse自动切换到了Debug界面,而且成功的断点下来了,并且变量可以在右边窗口查看 Debug界面上的按钮就不再多说了,就是继续执行,单步执行什么的几个,摸索一下便知





PS: 上述操作中我们复制了cocos2dx的好多文件到NDK的目录下面去,显的有点繁琐,这样做的目录是为了避开去设置NDK_MODULE_PATH,如果一旦设置了NDK_MODULE_PATH,就会使的调试不可行,可能有更好的方法,如果你知道,或者有什么问题都可以直接在文章下面留言



PS: 上述操作中我们复制了cocos2dx的好多文件到NDK的目录下面去,显的有点繁琐,这样做的目录是为了避开去设置NDK_MODULE_PATH,如果一旦设置了NDK_MODULE_PATH,就会使的调试不可行,可能有更好的方法,如果你知道,或者有什么问题都可以直接在文章下面留言

去除警告 Android NDK: WARNING: APP_PLATFORM Android-14 Is Larger Than android:minSdkVersion 8

MAY 18TH, 2013 | COMMENTS

使用ndk-build编译项目的时候会看到一个警告“Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8”,虽然”不怎么”影响结果,看着碍眼

解决方法

在项目里的jni/Application.mk文件里加入一行

APP_PLATFORM := android-8

即可.

为什么会有这个警告?

在android上项目里,可以在AndroidManifest.xml中写入

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17"/>

来表示程序可以运行的最低android设备是android 2.2(API Version 8), 经过详细测试的目标android版本是android 4.2.2(API Version 17).这里定义的是Java API Version

再来看一下ndk(版本r8e)目录下的platforms文件夹,可以看到

android-3android-4android-5android-8android-9android-14

一共有6个文件夹,分别表示相应的Native API Version


看到这里就明白了,那个警告的意思就是说,使用的Native API Version比最低版本Java API要高,可能导致的问题就是:
在Native Code里使用了一个platforms/android-14下的API函数,然后程序在 android-8 的设备上运行,当然这个函数在android-8设备上是不存在的,就会崩溃了


为什么Native API的版本数量会少于Java API?

因为android在版本升级的时候,有时候只升级了Java层的API,而Native层的却没有变化


PS: 上述操作中我们复制了cocos2dx的好多文件到NDK的目录下面去,显的有点繁琐,这样做的目录是为了避开去设置NDK_MODULE_PATH,如果一旦设置了NDK_MODULE_PATH,就会使的调试不可行,可能有更好的方法,如果你知道,或者有什么问题都可以直接在文章下面留言
0 0
原创粉丝点击