Ejecución de ndk-gdb con error de paquete no encontrado en el teléfono Motorola

Tengo una aplicación C ++ para Android que estoy tratando de depurar con ndk-gdb. La aplicación utiliza múltiples subprocesos, pero supuestamente r5 de la ndk admite múltiples subprocesos. Además, ni siquiera estoy llegando al punto en que se inicia gdb. Ejecuto el comando:

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

A continuación, encuentra el camino adecuado para el ndk y sdk (o al menos adb), y el necesario ABIs y demás.

 $ 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 

A continuación, busca el servidor gdb, y lo encuentra, incluyendo el PID adecuado, seguido de iniciar la actividad.

Pero entonces, me dice que el paquete no se puede encontrar:

 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 

A continuación, escupe lo que obtendría si usara indebidamente adb (el archivo de ayuda), seguido de:

 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 

Miré en /data/system/packages.list, y sí, mi apk es sin duda allí, y la ubicación que apunta es correcta en el sistema de archivos. Así que ese no es el problema.

Este tutorial: http://vilimpoc.org/blog/2010/09/23/hello-gdbserver-a-debuggable-jni-example-for-android/ recomienda la eliminación y reinstalación, así como la limpieza de la compilación de eclipse.

No utilicé eclipse para construir el paquete, pero lo limpié todo y compilar desde cero, eliminado y reinstalado sin suerte.

¿Alguien ha tenido problemas similares, y cómo los resolvió? Gracias.

Editar: Oh, y he intentado un puerto diferente en vano, no parece ser nada en 5039 (el puerto predeterminado) de todos modos. Y afaik, no tengo firewalls que bloquean esa conexión. Estoy desarrollando en Ubuntu 11.04 también.

Edit2: Hmm … parece que con el nuevo ndk (r5c), el mensaje de error también ha cambiado:

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

Y sí, debuggable se establece en true en el manifiesto, y todo el código nativo se construye con:

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

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

Por lo tanto, por desgracia, su dispositivo no puede utilizarse con ndk-gdb, ya que run-as no funciona. Si desea utilizar ese dispositivo, debe tener privilegios de root.

EDITADO:

Modifique el script ndk-gdb para deshacerse de la dependencia de run-as. Funciona sólo en privilegios de root ('adb shell whoami' debería ser '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 

Hay un error con run-as, fallará si tienes demasiadas aplicaciones instaladas. Pude trabajar alrededor de este problema quitando algunas aplicaciones de mi Evo 4G. Encontré esto en los grupos de discusión de NDK: http://groups.google.com/group/android-ndk/browse_thread/thread/ae9e8d5fe2716ae6?pli=1

Tuve el mismo problema hoy con Samsung Galaxy S ejecutando MIUI rom. Ndk-gdb siempre informó "No se pudo extraer el directorio de datos del paquete. ¿Está seguro de que la aplicación instalada es debuggable?"

Resultó que la razón es que correr-como no funciona debido a / data / data enlace simbólico. Cyanogen se utiliza en la ROM personalizada. Eliminar el enlace simbólico y mover todos los archivos de / datadata a / data / data resolvió el problema.

Cianógeno 2.3:

Ndk-gdb se basa en el comando 'run-as', que por sí mismo realiza una serie de comprobaciones en el directorio / data / data. En Cyanogen 2.3, es un enlace simbólico, y run-as falla con un mensaje críptico, y ndk-gdb falla a cambio con [2]:

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

Un work-around es recrear / data / data con el enlace simbólico:

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

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

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

Espero que ayude a otros con problemas similares. Compruebe si run-as funciona como se esperaba o no. No es porque su binario no es debuggable. El mensaje de error de ndk-gdb es muy engañoso.

Tenía un problema similar y corriendo:

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

Salida:

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

Arreglar era desinstalar en el dispositivo y reinstalar desde la línea de comandos a través de:

 adb install MyApkFile.apk 

¡También experimenté este problema y descubrí que puede ser causado por los nombres cortos del paquete!

Al probar en un sistema Android 2.2 con una aplicación que tenía un paquete con 3 niveles (por ejemplo: abc) ndk-gdb no funcionaría. Cambiar el paquete para tener 4 o más niveles (egabcd) o correr en Android 2.3 o posterior resolvió el problema.

Consulte http://code.google.com/p/android/issues/detail?id=13965 para obtener más información.

Aún hay otra posibilidad de que se produzca este problema: si ya ha instalado su aplicación como una aplicación del sistema (en / system / app), desinstalada y luego instalada de nuevo como una aplicación normal. En ese caso es posible que todavía queden algunos archivos que su aplicación no puede acceder porque no tiene permisos.

Lo solucioné desinstalando mi aplicación y quitando manualmente cada pieza de información relacionada con ella (con privilegios de shell y root de adb). Por lo que yo sé, que comprende:

  • Todo bajo / data / data / <su paquete de aplicaciones>
  • El archivo denominado / data / dalvik-cache / * <su paquete de aplicaciones> *

Después de instalarlo de nuevo, pude depurar la aplicación de nuevo.

En caso de que alguien está usando Samsung Galaxy S4 / … y obtuvo 4.4.2 (última stock rom – por ahora en todos los países) – que se jodió! Error de Samsung Así que la raíz como se explica en una de las respuestas anteriores, o obtener otro dispositivo … Otra solución es volver a Android 4.2.2 (no 4.4.2) – pre versión 4.3 que comenzó este problema.

  • Depurar código nativo de Android con GDB es dolorosamente lento
  • run-as El paquete 'abc' es desconocido - Galaxy S4 Jellybean o Android 4.3
  • No es capaz de golpear el punto de interrupción en ndk-gdb en Android
  • Android gdb error, "No se puede acceder a la memoria en la dirección"
  • La salida de gdb remota de Android es dolorosamente lenta
  • Android / GDB - Dolor de cabeza - no puede encontrar símbolos de depuración
  • Android ndk-gdb no carga símbolos
  • Depuración nativa de Android, bibliotecas ndk-gdb no encontradas
  • Depuración de ARM NEON para Android NDK
  • Android NDK + GDB
  • Cómo obtener ndk-gdb trabajando en Android?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.