Estoy tratando de realizar el código nativo de depuración en mi HTC Desire para mi proyecto Android.
El proyecto está hecha de una fina capa de la JNI de contenedor y la principal parte en C++, compilado utilizando ndk-build. El depurables bandera, me estoy quedando 2.2 en un HTC Desire y estoy trabajando con Ubuntu en mi PC.

Así una llanura ndk-gdb-comienzan devuelve un:

ERROR: Could not setup network redirection to gdbserver?
   Maybe using --port=<port> to use a different TCP port might help?

Esto es raro. Busqué en internet y encontré que es el equivocado mensaje de error causado por un defecto en el ndk-gdb. Si me quedo ndk-gdb — inicio –verbose puedo obtener esta mal estado de error:

Android NDK installation path: /home/marco/dev/android-ndk
Using specific adb command: /home/marco/dev/android-sdk//platform-tools/adb
ADB version found: Android Debug Bridge version 1.0.26
Using final ADB command: '/home/marco/dev/android-sdk//platform-tools/adb'
Using auto-detected project path: .
Found package name: com.marco83.siege
ABIs targetted by application: armeabi
Device API Level: 8
Device CPU ABIs: armeabi-v7a armeabi
Compatible device ABI: armeabi
Found debuggable flag: true
Found device gdbserver: /data/data/com.marco83.siege/lib/gdbserver
Using gdb setup init: /home/marco/dev/siege_game/trunk/SiegeGameNative/libs/armeabi/gdb.setup
Using toolchain prefix: /home/marco/dev/android-ndk/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-
Using app out directory: /home/marco/dev/siege_game/trunk/SiegeGameNative/obj/local/armeabi
Found data directory: 'run-as: Package 'com.marco83.siege' has corrupt installation'
Found first launchable activity: .Main
Launching activity: com.marco83.siege/.Main
## COMMAND: /home/marco/dev/android-sdk//platform-tools/adb shell am start -n com.marco83.siege/.Main
Starting: Intent { cmp=com.marco83.siege/.Main }
Warning: Activity not started, its current task has been brought to the front
## COMMAND: /home/marco/dev/android-sdk//platform-tools/adb shell sleep 2
Found running PID: 844
Launched gdbserver succesfully.
Setup network redirection
## COMMAND: /home/marco/dev/android-sdk//platform-tools/adb forward tcp:5039 localfilesystem:run-as: Package 'com.marco83.siege' has corrupt installation/debug-socket
## COMMAND: /home/marco/dev/android-sdk//platform-tools/adb shell run-as com.marco83.siege lib/gdbserver +debug-socket --attach 844
Android Debug Bridge version 1.0.26
-d                            - directs command to the only connected USB device
returns an error if more than one USB device is present.
-e                            - directs command to the only running emulator.
returns an error if more than one emulator is running.
-s <serial number>            - directs command to the USB device or emulator with
the given serial number. Overrides ANDROID_SERIAL
environment variable.
-p <product name or path>     - simple product name like 'sooner', or
a relative/absolute path to a product
out directory like 'out/target/product/sooner'.
If -p is not specified, the ANDROID_PRODUCT_OUT
environment variable is used, which must
be an absolute path.
devices                       - list all connected devices
connect <host>[:<port>]       - connect to a device via TCP/IP
Port 5555 is used by default if no port number is specified.
disconnect [<host>[:<port>]]  - disconnect from a TCP/IP device.
Port 5555 is used by default if no port number is specified.
Using this ocmmand with no additional arguments
will disconnect from all connected TCP/IP devices.
device commands:
adb push <local> <remote>    - copy file/dir to device
adb pull <remote> [<local>]  - copy file/dir from device
adb sync [ <directory> ]     - copy host->device only if changed
(-l means list but don't copy)
(see 'adb help all')
adb shell                    - run remote shell interactively
adb shell <command>          - run remote shell command
adb emu <command>            - run emulator console command
adb logcat [ <filter-spec> ] - View device log
adb forward <local> <remote> - forward socket connections
forward specs are one of: 
tcp:<port>
localabstract:<unix domain socket name>
localreserved:<unix domain socket name>
localfilesystem:<unix domain socket name>
dev:<character device name>
jdwp:<process pid> (remote only)
adb jdwp                     - list PIDs of processes hosting a JDWP transport
adb install [-l] [-r] [-s] <file> - push this package file to the device and install it
('-l' means forward-lock the app)
('-r' means reinstall the app, keeping its data)
('-s' means install on SD card instead of internal storage)
adb uninstall [-k] <package> - remove this app package from the device
('-k' means keep the data and cache directories)
adb bugreport                - return all information from the device
that should be included in a bug report.
adb help                     - show this help message
adb version                  - show version num
DATAOPTS:
(no option)                   - don't touch the data partition
-w                           - wipe the data partition
-d                           - flash the data partition
scripting:
adb wait-for-device          - block until device is online
adb start-server             - ensure that there is a server running
adb kill-server              - kill the server if it is running
adb get-state                - prints: offline | bootloader | device
adb get-serialno             - prints: <serial-number>
adb status-window            - continuously print device status for a specified device
adb remount                  - remounts the /system partition on the device read-write
adb reboot [bootloader|recovery] - reboots the device, optionally into the bootloader or recovery program
adb reboot-bootloader        - reboots the device into the bootloader
adb root                     - restarts the adbd daemon with root permissions
adb usb                      - restarts the adbd daemon listening on USB
adb tcpip <port>             - restarts the adbd daemon listening on TCP on the specified port
networking:
adb ppp <tty> [parameters]   - Run PPP over USB.
Note: you should not automatically start a PPP connection.
<tty> refers to the tty for PPP stream. Eg. dev:/dev/omap_csmi_tty1
[parameters] - Eg. defaultroute debug dump local notty usepeerdns
adb sync notes: adb sync [ <directory> ]
<localdir> can be interpreted in several ways:
- If <directory> is not specified, both /system and /data partitions will be updated.
- If it is "system" or "data", only the corresponding partition
is updated.
environmental variables:
ADB_TRACE                    - Print debug information. A comma separated list of the following values
1 or all, adb, sockets, packets, rwx, usb, sync, sysdeps, transport, jdwp
ANDROID_SERIAL               - The serial number to connect to. -s takes priority over this if given.
ANDROID_LOG_TAGS             - When used with the logcat option, only these debug tags are printed.
ERROR: Could not setup network redirection to gdbserver?
Maybe using --port=<port> to use a different TCP port might help?
[email protected]:~/dev/siege_game/trunk/SiegeGameNative$ run-as: Package 'com.marco83.siege' has corrupt installation

que, como se puede ver y como se informó aquí: http://vilimpoc.org/blog/2010/09/23/hello-gdbserver-a-debuggable-jni-example-for-android/ es causado por una mezcla de diferentes salidas simultáneas; el error real debe ser

Package 'xxxxx' has corrupt installation

Una mayor investigación en este error me señaló: http://osdir.com/ml/android-ndk/2010-08/msg00263.html

donde el mismo error, y dicen que no es posible depurar de forma nativa en el Deseo. El problema es con run-as no poder acceder a el /la carpeta de datos.

Cualquier otra solución que la de enraizamiento/flashear el teléfono? ¿Por qué el run-as de acceso /datos?
Yo estaba pensando en un ingenuo solución donde puedo copiar el paquete (objs, bibliotecas, …) en una más fácil ubicación accesible (como en la SDcard) y decir que el depurador para acceder a ese lugar – ¿es factible?

Gracias
Marco

EDICIÓN: Actualización: he rooteado el teléfono con unrevoked3. Incluso si me puse chmod 0777 data (que probablemente es EXTREMADAMENTE peligroso), me sale el mismo error. Como se informó en el segundo enlace en el post, de ejecución, como es la comprobación de si /datos es accesible. ¿Cómo puedo acceder a ejecutar el código fuente? Es posible compilar y cargar una versión modificada que funciona en torno a esta verificación? (desde que tengo set /datos a ser legible por todo el mundo, de todos modos)

InformationsquelleAutor Marco83 | 2011-02-02

6 Comentarios

  1. 4

    Me corrigió este problema para un HTC Desire S (2.3.3) cambiando de acceso & de la propiedad del directorio «/data/data’:

    Antes de la revisión:

    ls -l /data
    (...)
    drwxrwxrwx root     root              2012-03-03 19:07 data

    En modo raíz:

    chmod 771 /data/data
    chown system.system /data/data
    ls -l /data
    (...)
    drwxrwx--x system   system            2012-03-03 19:07 data

    También el /los datos del director de la posible necesidad de cambiar.

    chmod 771 /data
    chown system.system /data
    • Encuentra este debate: groups.google.com/forum/#!msg/android-ndk/cubyLmLNTXQ/… . Usuario Ratamovic analizados run-as código y se encontró que utiliza check_data_path que llama check_directory_ownership, que en su orden tiene la descripción siguiente comentario: Esta función se utiliza para comprobar la ruta de directorio de datos de seguridad. Comprobamos que cada sub-directorio es propiedad del ‘sistema’ de usuario y existe y no es un enlace simbólico. También comprobamos que la ruta completa del directorio está correctamente propiedad de la ID de usuario.
    • … obviamente, requiere que el dispositivo esté rooteado, por supuesto.
  2. 3

    Tienen el mismo problema con mi HTC Legend. Mi solución:

    1. conseguir acceso root
    2. obtener el PID de la aplicación que usted desea depurar: ps | grep your_app_package
    3. ejecutar gdb servidor: /data/data/your_app_package/lib/gdbserver :5039-adjuntar PID

    en la nueva terminal

    1. adb forward tcp:5039 tcp:5039
    2. adb pull system/bin/app_process project_path/obj/local/armeabi/app_process
    3. adb pull system/bin/libc.por lo tanto, /project_path/obj/local/armeabi/libc.así

    Ahora puede conectarse a gdbserverb (http://mhandroid.wordpress.com/2011/01/23/using-eclipse-for-android-cc-debugging/#more-23 omita los pasos con ndk-gdb).

    PS: no te olvides de compilar el código con los siguientes indicadores

    LOCAL_CFLAGS := -g #debug

    LOCAL_LDFLAGS := -Wl,-Mapa de xxx.mapa #crear el mapa de la fil

    • Gracias, voy a tratar lo antes posible para hacerle saber si funciona!
    • Estoy viendo el mismo problema en el Nexus One y Xoom. Ambos tienen el directorio » /data conjunto de permisos de 771, lo que significa que incluso la comprobación de la existencia de gdbserver en el dispositivo (ndb-gdb hace) no funciona.
  3. 1

    Topé con este hilo: http://code.google.com/p/android/issues/detail?id=16391

    Resuelto de ejecución como problema, para mí, ndk-gdb ahora funciona correctamente.

    • Para resumir: el de ejecución como en Android pre-v4.0 tiene un bug por el cual se supone que los paquetes de la base de datos está a menos de 8 KB de largo. En una gran cantidad de dispositivos, especialmente aquellos con una gran cantidad de crapware preinstalado, los paquetes de base de datos es ya más de 8 KB. Si el nombre del paquete se agrega a la base de datos de más allá de la primera 8KB, ejecutar-como no ser capaz de encontrarlo, y se librara con el error «Paquete» X » ha dañado la instalación.
  4. 0

    Solía tener este problema, hasta que he cambiado el nombre del paquete a ser 4 anidado en lugar de 3. No sé por qué eso es un problema (ya envié un correo a los desarrolladores sobre él), pero si el nombre del paquete es a.b.c sólo el depurador de java funciona. Para los nativos de depuración debe ser en la forma de a.b.c.d.

  5. 0

    La ruta //debe ser la correcta (tanto los «datos» directorios son 771 y
    sistema:el sistema, la aplicación del directorio de datos es 755 y de la propiedad de una «app_»
    cuenta).

  6. 0

    la necesidad de u-s en la curva s-off (firmware)

    para tegra 3 chip s-off

    http://bbs.angeeks.com/thread-2598143-1-1.html

    ///

    de Qualcomm chip s-off

    bbs.htc.com/cn/thread-11592-1-1.html

    Tengo 2 teléfonos de HTC, la Sensación de s-off, Una X s-on

    Sensación puede utilizar ndk de depuración, pero X no puede.

    aquí es foto de la izquierda es la Sensación, el derecho es Uno X

    https://plus.google.com/photos/106185541018774360364/albums/6156448731748249457/6156448735435939234?banner=pwa&sort=1&pid=6156448735435939234&oid=106185541018774360364

Dejar respuesta

Please enter your comment!
Please enter your name here