无法提取包的数据目录。您确定已安装的应用程序是否可调试?

时间:2013-12-29 12:40:56

标签: android c eclipse android-ndk

我正在使用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

但是如何解决这个问题?

3 个答案:

答案 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,则r​​un-as将失败。第二个错误通过错误地限制包含所有包名的packages.list文件的读取权限来影响一些4.2.2和4.3 Android图像。

此处的解决方案:http://visualgdb.com/KB/?ProblemID=nopkg