首页 > 代码库 > VS下真机调试android native app(以cocos2dx手游为例)

VS下真机调试android native app(以cocos2dx手游为例)

0.虽然使用手游为例,但适用于任何原生C++ NDK编译方式。

1. 先说说项目背景, cocos2dx的手游,开发一般在windows vs下开发调试,IOS下使用xcode也能很方便的调试,但android就没那么幸运了,一般调试就靠log来分析问题,总觉得效率低下。调试原生的android程序adb ,cygwin gdb-ndk,ecpliseandroid native app也搞过,但觉得不太方便,而且能否调试成功还得靠RP,真是调试不易,且行且珍惜。就想能不能在vs下调试android程序而且配置还得相对简单。

2. 在网上g了一把发现有个神器叫visualGDB,看看了可以用来调试linuxandroid程序,于是就想试试这个是否靠谱。

需要的工具

1.Vs2010或者2012

2.visualGDB 这工具是收费的,附件给了个破解版

3.一个被Root过,而且有要有/data/data/data目录权限,也就是adb需要能以root登录。否则在启动调试会发现gdbserver文件无法copy/data目录下而不能调试

4. android NDk

5. android sdk

6. ant

7. java-jdk

3. 安装配置visualGDB

1.安装后在vs的菜单上多了一项目android- àset sdk/ndk location打开下面界面设置自己的

Sdk ndk ant jdk相关路径

新建一个visualGDB的工程 Start Visual Studio. Select File->New project->VisualGDB->Android App Wizard.

可以看到在安装了visualGDB后在新建工程里多了一项,我们需要新建一个这样的项目

导入我们的项目,选择最后一个import existing from Ecplise or ant

4.选择android工程,这里是AndroidManifest.xml所在的目录

在创建工程的时候目标选择android-18

在AndroidManifest.xml里增加android:debuggable="true"来生成带调试信息的so

现在就可以开始编译了打包了(需保证android.mk文件 antbuild.xml都没有问题,至少已经能在ecplise下编译构建能通过)。

4.编译完成后,会自动使用ant打包成apk,如果在bin目录下看到生成的apk就表示成功了,下面开始调试

菜单->android->debug android app,会出现下面界面,其实该工具也是使用的adb来完成调试的。

我们项目在调试的时候会在这个界面时间比较长,一般在200s左右,提示来看可能是工程过大,文件过多导致。

PS:前几天在本机ecplise编译的时候在link的时候报个很奇怪的错误

link的时候报了一个CreateProcess No such file or dir的错误,当时不知道什么原因,至少g了一把,就看到一个人问同样的问题,说可能是文件数过多导致。

我们文件个数796个,就怀疑在link的时候参数太长了导致。

当时就像把通用的做成一个独立的so,或者.a。但这样也只决解了当前的问题,万一以后在多起来还是一样,就想android.mk里有没有选择提供支持

找个下面这个选项,果然就ok了。

成功启动调试

Creash也能直接看到堆栈,很方便

5.遇到的几个坑

1. 设备不识别,在输入adb.exe devices 设备显示的是?号。

如果显示的是

 devices

这样表示usb打开有问题,驱动成功安卓,这样启动调试会提示“路径中具有非法字符”的错误

adb devices问号 设备不识别原因很多,我是在机器设置里选择usb连接方式选择“媒体设置(MTP)”连接就好了。

2.在创建工程的时候sdk\platforms 选择android-18,否则在调试的时候可能报一个armeabi-7v错误

3.在ant构建报一个异常,这是由于AndroidManifest.xml和project.properties里的

target=android-<value>值不一样导致

[dx] UNEXPECTED TOP-LEVEL EXCEPTION:

1> [dx] java.nio.BufferOverflowException
1> [dx] at java.nio.Buffer.nextPutIndex(Buffer.java:519)
1> [dx] at java.nio.HeapByteBuffer.putShort(HeapByteBuffer.java:315)

6. VisualGDB调试启动过程

Adb –s 设备id command

当已经有多个设备连接到主机时,可以使用-s参数进行选择.

获得设备信息

E:\lccifter_FB\lucifter\adt-bundle-windows-x86-20130917\sdk\platform-tools\adb.exe devices

List of devices attached

00664BACF43F device

查看当前进程

E:\lccifter_FB\lucifter\adt-bundle-windows-x86-20130917\sdk\platform-tools\adb.exe -s 00664BACF43F shell ps

USER PID PPID VSIZE RSS WCHAN PC NAME

root 1 0 500 368 ffffffff 00000000 S /init

root 2 0 0 0 ffffffff 00000000 S kthreadd

root 3 2 0 0 ffffffff 00000000 S ksoftirqd/0

………..N多个

E:\lccifter_FB\lucifter\adt-bundle-windows-x86-20130917\sdk\platform-tools\adb.exe -s 00664BACF43F shell id

uid=2000(shell)gid=2000(shell) groups=1003(graphics),1004(input),1007(log),1009(mount),1011(adb),1015(sdcard_rw),1028(sdcard_r),3001(net_bt_admin),3002(net_bt),3003

(inet),3006(net_bw_stats)

安装apk-r表示重新安装

E:\lccifter_FB\lucifter\adt-bundle-windows-x86-20130917\sdk\platform-tools\adb.exe -s 00664BACF43F install -r "E:\lc_fb_test\cocos2d-x-2.1.4\samples\Cpp\HelloCpp

\proj.android\bin\HelloWorld-debug.apk"

pkg: /data/local/tmp/HelloWorld-debug.apk

Success

3741 KB/s (1406256 bytes in 0.367s)

启动一个app 路径由pwd返回

E:\lccifter_FB\lucifter\adt-bundle-windows-x86-20130917\sdk\platform-tools\adb.exe -s 00664BACF43F shell run-as org.cocos2dx.hellocpp /system/bin/sh -c pwd

/data/data/org.cocos2dx.hellocpp

获取cpu架构信息

E:\lccifter_FB\lucifter\adt-bundle-windows-x86-20130917\sdk\platform-tools\adb.exe -s 00664BACF43F shell getprop ro.product.cpu.abi

armeabi-v7a

运行一个包名为org.cocos2dx.hellocpp 活动activity HelloCpp

E:\lccifter_FB\lucifter\adt-bundle-windows-x86-20130917\sdk\platform-tools\adb.exe -s 00664BACF43F shell am start -n org.cocos2dx.hellocpp/.HelloCpp

Starting: Intent { cmp=org.cocos2dx.hellocpp/.HelloCpp }

E:\lccifter_FB\lucifter\adt-bundle-windows-x86-20130917\sdk\platform-tools\adb.exe -s 00664BACF43F shell ls /data/data/org.cocos2dx.hellocpp/lib/gdbserver

/data/data/org.cocos2dx.hellocpp/lib/gdbserver

E:\lccifter_FB\lucifter\adt-bundle-windows-x86-20130917\sdk\platform-tools\adb.exe -s 00664BACF43F shell ps

USER PID PPID VSIZE RSS WCHAN PC NAME

root 1 0 500 368 ffffffff 00000000 S /init

root 2 0 0 0 ffffffff 00000000 S kthreadd

root 3 2 0 0 ffffffff 00000000 S ksoftirqd/0

转发端口

E:\lccifter_FB\lucifter\adt-bundle-windows-x86-20130917\sdk\platform-tools\adb.exe -s 00664BACF43F forward tcp:5039 tcp:5039