在摩托罗拉手机上运行ndk-gdb包未find错误

我有一个C ++的Android应用程序,我试图用ndk-gdb进行debugging。 应用程序确实使用多个线程,但据推测ndk的r5支持多个线程。 另外,我甚至没有到gdb启动的地步。 我运行命令:

ndk-gdb --start --force --verbose 

然后它findndk和sdk(或至lessadb)的正确path,以及所需的ABI和什么。

 $ ndk-gdb --start --force --verbose Android NDK installation path: /home/leif/eclipse/android-ndk-r5b Using default adb command: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb ADB version found: Android Debug Bridge version 1.0.26 Using final ADB command: '/home/leif/eclipse/android-sdk-linux_86/platform-tools/adb' Using auto-detected project path: . Found package name: net.leifandersen.mobile.android.marblemachine ABIs targetted by application: armeabi Device API Level: 10 Device CPU ABIs: armeabi-v7a armeabi Compatible device ABI: armeabi 

然后,它查找gdb服务器,并find它,包括正确的PID,然后开始活动。

但是,它告诉我,该包无法find:

 Setup network redirection ## COMMAND: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb shell run-as <package name> lib/gdbserver +debug-socket --attach 16040 ## COMMAND: /home/leif/eclipse/android-sdk-linux_86/platform-tools/adb forward tcp:5039 localfilesystem:run-as: Package '<package name>' is unknown/debug-socket 

然后,如果您不正确地使用adb(帮助文件),则会吐出您将得到的结果,其次是:

 ERROR: Could not setup network redirection to gdbserver? Maybe using --port=<port> to use a different TCP port might help? run-as: Package '<package name>' is unknown 

我看着/data/system/packages.list,是的,我的apk肯定是在那里的,它指向的位置在文件系统上是正确的。 所以这不是问题。

本教程: http : //vilimpoc.org/blog/2010/09/23/hello-gdbserver-a-debuggable-jni-example-for-android/build议删除并重新安装,以及清洁你的eclipse构build。

我没有使用eclipse来构build这个包,但是我清理了所有东西,从头开始编译,删除,然后重新安装到没有运气。

有没有人有类似的问题,你是如何解决他们? 谢谢。

编辑:哦,我已经尝试了不同的端口无济于事,似乎没有任何5039(默认端口)上的任何东西。 而afaik,我没有任何防火墙阻止这种连接。 我也在Ubuntu 11.04上开发。

编辑2:嗯…它看起来像新的ndk(r5c),错误信息现在也改变了:

 ERROR: Could not extract package's data directory. Are you sure that your installed application is debuggable? 

是的,清单中的debuggable被设置为true,所有的本地代码都是用下面的代码构build的:

 LOCAL_CFLAGS := -Wall -g LOCAL_LDFLAGS := -Wl,-Map,xxx.map 

Related of "在摩托罗拉手机上运行ndk-gdb包未find错误"

 run-as: Package 'net.leifandersen.mobile.android.marblemachine' is unknown 

因此,不幸的是,你的设备不能用于ndk-gdb,因为run-as不起作用。 如果您想使用该设备,则必须拥有root权限。

编辑:

修改ndk-gdb脚本来摆脱run-as的依赖。 它只适用于root权限('adb shell whoami'应该是'root')。

 --- ndk-gdb 2011-02-24 16:55:07.000000000 +0900 +++ ndk-gdb-root 2011-06-09 08:35:04.000000000 +0900 @@ -465,7 +465,7 @@ log "Using app out directory: $APP_OUT" # Find the <dataDir> of the package on the device -DATA_DIR=`adb_shell run-as $PACKAGE_NAME /system/bin/sh -c pwd` +DATA_DIR="/data/data/$PACKAGE_NAME" log "Found data directory: '$DATA_DIR'" if [ $? != 0 -o -z "$DATA_DIR" ] ; then echo "ERROR: Could not extract package's data directory. Are you sure that" @@ -543,7 +543,7 @@ # Launch gdbserver now DEBUG_SOCKET=debug-socket -run $ADB_CMD shell run-as $PACKAGE_NAME lib/gdbserver +$DEBUG_SOCKET --attach $PID & +run $ADB_CMD shell "(cd $DATA_DIR; lib/gdbserver +$DEBUG_SOCKET --attach $PID)" & if [ $? != 0 ] ; then echo "ERROR: Could not launch gdbserver on the device?" exit 1 

运行有一个错误,如果你安装了太多的应用程序,它将会失败。 我能够通过从我的Evo 4G中删除一些应用程序来解决这个问题。 我在NDK讨论组中find了这个: http: //groups.google.com/group/android-ndk/browse_thread/thread/ae9e8d5fe2716ae6?pli=1

今天我用三星Galaxy S运行MIUI ROM的问题。 ndk-gdb总是报告“无法解压缩包的数据目录,你确定你安装的应用程序是可debugging的吗?

原来是因为/ data / data符号链接而导致运行不起作用。 氰化物在定制的ROM中使用。 删除符号链接并将所有文件从/ datadata移动到/ data / data解决了这个问题。

氰基2.3修复:

ndk-gdb依赖于“run-as”命令,该命令本身对/ data / data目录进行了一些检查。 在Cyanogen 2.3中,它是一个符号链接,运行失败并带有一个神秘的消息,而ndk-gdb失败返回[2]:

 ERROR: Could not extract package's data directory. Are you sure that your installed application is debuggable? 

解决方法是用符号链接重新创build/数据/数据:

 cd /data/data /datadata.break-run-as mkdir -m 771 /data/data/ chown system: v mv /datadata/* /data/data/ 

http://en.wikibooks.org/wiki/OpenGL_Programming/Installation/Android_NDK

http://forum.cyanogenmod.com/topic/27657-run-as-not-working-due-to-datadata-symlink/

希望能帮助有类似问题的人。 检查是否按预期运行。 这不是因为你的二进制文件不可debugging。 ndk-gdb的错误信息是非常误导的。

有一个类似的问题和运行:

 adb shell run-as com.mypackagename /system/bin/sh -c pwd 

会输出:

 run-as: Package 'com.mypackagename' has corrupt installation 

修复是在设备上卸载,然后通过命令行重新安装:

 adb install MyApkFile.apk 

我也遇到过这个问题,发现可能是由于包名太短造成的!

当在Android 2.2系统上testing一个包含3个级别的应用程序(例如:abc)时,ndk-gdb将不起作用。 改变软件包有4个或更多级别(egabcd)或运行在Android 2.3或更高版本解决了这个问题。

有关更多信息,请参阅http://code.google.com/p/android/issues/detail?id=13965

这个问题还有另外一个可能性:如果你之前已经将你的应用程序安装为系统应用程序(在/ system / app中),那么将其卸载并作为普通应用程序再次安装。 在这种情况下,可能还有一些文件仍然存在,您的应用程序无法访问,因为它没有权限。

我通过卸载我的应用程序并手动删除与之相关的所有信息(使用adb shell和root权限)来解决这个问题。 据我所知,这包括:

  • 在/ data / data / <你的应用程序包>下的所有东西
  • 名为/ data / dalvik-cache / *的文件<您的应用程序包> *

再次安装后,我能够再次debugging应用程序。

如果有人正在使用三星Galaxy S4 / …和4.4.2(最新的股票ROM – 现在在所有国家) – 你搞砸了! 三星的错误。 所以根据解释在上面的答案之一,或得到另一个设备…另一个解决scheme是恢复到Android 4.2.2(不是4.4.2) – 前4.3版本,开始这个问题。