Android漫游记(4)---.so文件动态调试一例

    Android平台的动态调试一直以来是个困扰我等Coder的头疼问题,特别是对于本地的动态调试支持,可以说是“弱智”级别的,不知道Google的新版NDK和新出的Android Studio对这块支持如何,让我们拭目以待。

    言归正传,我这里采用的是cygwin+ndk-gdb的调试模式,灵感来自于XDA的一篇博文(点击打开链接),平台和原文作者不同:

    1、Win7 64

    2、NDK r9d x86_64

    3、Android 4.2.2

    4、cygwin 64

    5、IDA pro 6.1

    话不多话,开始正题,调试步骤如下:

    1、环境搭建这类的各位可以自行Google之,这里就不多说了。

    2、首先我们随便找个网站,下载游戏的APK包。Android的APK包的正式发布版本是取消了debug属性的,在调试之前,我们还需要做些准备工作。

    3、用apktool解包apk文件,然后修改AndroidManifest.xml,在重新打包,再用signapk签名。

    4、为ndk-gdb调试做准备工作,这个上面那篇博文已经写得很详细,这里不再赘述。说明一点:我们调试的目标是.\libs\armeabi\libgame.so,这个so是游戏主库文件。

          准备好后的目录结构大致如下:

          

    5、好了,准备工作完毕,开始我们的调试之旅!

    首先,安装我们重新打包的apk到手机,然后进入cygwin shell,进入本地的游戏解包后的目录。这里要重点说明一点:由于一些兼容性问题,我们不能直接使用google原来的ndk-gdb调试脚本,需要做一些修改:

    

我这里直接给DATA_DIR赋值为app目录:/data/data/com.umonistudio.tile。这步骤很重要,否则你会遇到run-as之类的错误,导致无法继续调试!

好了,终于准备完毕了,切换到cygwin shell,开始调试,如果没有问题的话,就会顺利进入gdb提示符,我的输出如下:

$ ndk-gdb --verbose --start --nowait
Android NDK installation path: /cygdrive/e/Tools/android-ndk-r9d-windows-x86_64/       android-ndk-r9d
Using default adb command: /cygdrive/e/Tools/adt-bundle-windows-x86_64-20131030/       adt-bundle-windows-x86_64-20131030/sdk/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.31
Using ADB flags:
Using JDB command: /cygdrive/e/Tools/Java/jdk1.7.0_15/bin/jdb
Using auto-detected project path: .
Found package name: com.umonistudio.tile
ABIs targetted by application: armeabi
Device API Level: 17
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi
Using gdb setup init: ./libs/armeabi/gdb.setup
Using toolchain prefix: /cygdrive/e/Tools/android-ndk-r9d-windows-x86_64/android-ndk-r9
Using app out directory: ./obj/local/armeabi
Found debuggable flag: true
Found data directory: '/data/data/com.umonistudio.tile'
Found device gdbserver: /data/data/com.umonistudio.tile/lib/gdbserver
Found first launchable activity: .tile
Launching activity: com.umonistudio.tile/.tile
## COMMAND: adb_cmd shell am start -n com.umonistudio.tile/.tile
Starting: Intent { cmp=com.umonistudio.tile/.tile }
## COMMAND: adb_cmd shell sleep 2
Found running PID: 8706
Launched gdbserver succesfully.
Setup
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值