我正在使用eclipse来调试我的Android应用程序,它具有c本机代码。
当我插入我的nexsus4时,ndk外部调试工具正常工作。
当我插入我的galaxy note2时,它会在尝试连接到设备时抛出以下错误:
Android NDK installation path: /Users/eladb/MyWorkspace/android-ndk-r8b
Using specific adb command: /Users/eladb/MyWorkspace/sdk/platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.31
Using ADB flags:
Using auto-detected project path: .
Found package name: com.myPack
ABIs targetted by application: armeabi
Device API Level: 18
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi
Using gdb setup init: ./libs/armeabi/gdb.setup
Using toolchain prefix: /Users/eladb/MyWorkspace/android-ndk-r8b/toolchains/arm-linux-androideabi-4.6/prebuilt/darwin-x86/bin/arm-linux-androideabi-
Using app out directory: ./obj/local/armeabi
Found debuggable flag: true
Found device gdbserver: /data/data/com.myPack/lib/gdbserver
ERROR: Could not extract package's data directory. Are you sure that
your installed application is debuggable?
我启用了开发人员选项
并允许通过usb进行设备调试
它对我的三星galaxy note2(android 4.3)无效,但适用于nexsus4(4.2)
我认为这是一个已知的issue?
但是如何解决这个问题?
答案 0 :(得分:3)
一般来说,Android 4.3存在问题。请查看Android错误跟踪器问题59558,该问题又链接到运行问题的根目录。 (58373)我不确定Note 2何时/是否达到4.4,所以你可能想看看你是否可以降级回4.1.2。
答案 1 :(得分:1)
在我的情况下,我已根植我的Android 2.3设备并将默认shell更改为bash,这在ndk-gdb尝试运行shell命令时导致问题。
sh-3.2$ ls -l /system/bin/sh*
lrwxrwxrwx root root 2014-02-01 10:26 sh -> bash
-rwsr-xr-x root shell 82840 2011-09-30 18:55 sh0
sh-3.2$
这导致android r9 ndk-gdb脚本中止了“无法提取包数据目录..”错误。
首先制作ndk-gdb脚本的备份副本。 然后,在ndk-gdb的第615行附近,进行以下编辑:
# Find the <dataDir> of the package on the device
# on my rooted Android 2.3 device, the default sh has actually been renamed to sh0
# so try that first.
adb_var_shell2 DATA_DIR run-as $PACKAGE_NAME /system/bin/sh0 -c pwd # <-- insert this line
if [ $? != 0 ] # <-- insert this line
then # <-- insert this line
adb_var_shell2 DATA_DIR run-as $PACKAGE_NAME /system/bin/sh -c pwd
if [ $? != 0 -o -z "$DATA_DIR" ] ; then
echo "ERROR: Could not extract package's data directory. Are you sure that"
echo " your installed application is debuggable?"
exit 1
fi
fi # <-- insert this line
基本上,它会先尝试使用/ system / bin / sh0。如果该文件不存在,那么它将尝试/ system / bin / sh。到目前为止我只测试了/ system / bin / sh0的情况,所以YMMV ..
答案 2 :(得分:1)
这是因为两个与run-as工具相关的已知错误。该工具需要从Android设备内的/data/system/packages.list文件中读取有关您的应用的信息。在第一个错误的情况下,该工具实际上只读取文件的前8KB。因此,如果包含您的应用说明的行低于前8 KB,则run-as将失败。第二个错误通过错误地限制包含所有包名的packages.list文件的读取权限来影响一些4.2.2和4.3 Android图像。