三星手机、小米、htc手机等都有可能遇到ndk无法调试的问题,这时候我们先运行ndk看一下详细的输出。
ndk-gdb --verbose --force --start
输出类似下面的错误:
Found debuggable flag: false
Found gdbserver under libs/armeabi,assuming app was built with NDK_DEBUG=1
Found device gdbserver:/data/data/com.example.test/lib/gdbserver
ERROR: Could not extract package's datadirectory. Are you sure that
your installed application is debuggable?
这个时候,请连接到adb shell上,试一下run-as工具能否正常工作,run-as后面加上你要调度的程序包名,如我这里就是com.example.test
shell@android:/ $ run-as com.example.test
run-as: Package 'com.example.test' has corrupt installation
如果出现上面的提示,那么可以试试下面的方法
前提:
手机必须root过,不然无法尝试。
没有root过的手机,我只能嘿嘿了。
1. 查看一下/data/以及/data/data的目录权限
1|shell@android:/ $ ll -d /data/
drwxrwxr-x system system 2014-02-21 17:16
shell@android:/ $ ll -d /data/data/
drwxrwx--x system system 2014-02-27 11:10
注意,需要这两个目录的权限都为drwxrwx--x。如果不是,就需要手动设置一下。
2. 设置/data/以及/data/data目录的权限
首先需要用root权限,
shell@android:/ $ su
然后再运行
shell@android:/ # chmod 771 /data/
shell@android:/ # chmod 771 /data/data/
之后再尝试run-as
如果不报错,就说明成功了。
3. 再次运行ndk-gdb
这一步就不用说了,不出意外,应该就可以调试了。
问题就是,为什么调试个ndk, 手机还要root呢?这么奇葩。。