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目录下而不能调试

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

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

4. android NDk

5. android sdk

6. ant

7. java-jdk

3. 安装配置visualGDB

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

Sdk ndk ant jdk相关路径

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

新建一个visualGDB的工程 Start Visual Studio. Select File->New project->VisualGDB->Android App Wizard.VS下真机调试android native app(以cocos2dx手游为例)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

成功启动调试

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

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

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

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

5.遇到的几个坑

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

如果显示的是

 devices

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

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

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

VS下真机调试android native app(以cocos2dx手游为例),布布扣,bubuko.com

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

上一篇:得到手机中最近开启的App


下一篇:IOS开发者常用的10个Xcode插件