In esecuzione ndk-gdb con pacchetto non trovato errore sul telefono motorola

Ho un C++ applicazione Android che sto cercando di debug con ndk-gdb. L’applicazione fa uso di più thread, ma presumibilmente r5 del ndk supporta più thread. Inoltre, io non sono nemmeno a raggiungere il punto in cui gdb si avvia. Ho eseguito il comando:

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

Trova quindi il percorso corretto per il ndk e sdk (o almeno adb), e il bisogno di ABIs e quant’altro.

$ 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

Quindi cerca gdb server, e la trova, tra cui la corretta PID, seguita dall’inizio dell’attività.

Ma poi, mi dice che il pacchetto non può essere trovato:

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

Poi sputa fuori quello che si otterrebbe se si utilizza impropriamente adb (il file della guida), seguita da:

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

Ho guardato in /data/system/pacchetti.elenco, e sì, il mio apk sicuramente più in là, e la posizione verso cui punta è corretto nel file system. Quindi non è questo il problema.

Questo tutorial: http://vilimpoc.org/blog/2010/09/23/hello-gdbserver-a-debuggable-jni-example-for-android/ si consiglia di eliminare e reinstallare, così come la pulizia eclipse costruire.

Io non uso eclipse per creare il pacchetto, ma l’ho fatto pulire tutto e compilare da zero, cancellato e reinstallato per fortuna.

Qualcuno ha avuto problemi simili e come hai fatto a risolvere? Grazie.

Edit: Oh, e ho provato una porta diversa, senza esito, non sembra essere nulla sul 5039 (la porta di default) comunque. E, per quanto ne so, non ho alcun firewall che bloccano la connessione. Sto sviluppando su Ubuntu 11.04 come bene.

Edit2: Hmm…sembra che con il nuovo ndk (r5c), il messaggio di errore è cambiato troppo:

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

E sì, debuggable è impostata su true, in il manifesto, e tutto il codice nativo è costruito con:

LOCAL_CFLAGS           := -Wall -g
LOCAL_LDFLAGS          := -Wl,-Map,xxx.map
  • Fa ‘$ adb shell esegui come net.leifandersen.mobile.android.marblemachine ls’ di lavoro?
  • No, ho fatto io: esegui come: Pacchetto net.leifandersen.mobile.android.marblemachine’ è sconosciuta, anche, sembra che c’è un bug report per questo genere di cose, ma il pacchetto non è a tre livelli di profondità: code.google.com/p/android/issues/detail?id=13965. Inoltre, come ho detto, il pacchetto è ancora elencato in /data/system/pacchetti.elenco.
InformationsquelleAutor Leif Andersen | 2011-05-28



7 Replies
  1. 15
    run-as: Package 'net.leifandersen.mobile.android.marblemachine' is unknown

    Così, purtroppo, il dispositivo non è in grado di essere utilizzato con ndk-gdb, a causa di run-in quanto non funziona. Se si desidera utilizzare il dispositivo, è necessario disporre di privilegi di root.

    MODIFICA:

    Modificare ndk-gdb script per sbarazzarsi della dipendenza di run-as. Funziona solo su i privilegi di root (‘adb shell whoami’ dovrebbe essere ‘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
    • Con i privilegi di root, come posso fare per risolvere il problema (o anche di capire che cosa il problema è, in primo luogo)? Grazie.
    • Ok, ho aggiornato la mia risposta per i privilegi di root.
    • Ha funzionato perfettamente, grazie.
    • (Beh, non r5c, ma r5b funziona bene, e immagino che una simile modifica avrebbe funzionato per r5c).
    • “Così, purtroppo, il dispositivo non è in grado di essere utilizzato con ndk-gdb, a causa di run-in quanto non funziona. Se si desidera utilizzare il dispositivo, è necessario disporre di privilegi di root.” – No, in realtà c’è un bug nel esegui come. Non hai bisogno di privilegi di root. Vedi la mia risposta.
    • Tu signore sei il mio eroe. Ballate dovrebbe essere cantato su di te!
    • esegui come è apparentemente completamente rotto sul 4.3: code.google.com/p/android/issues/detail?id=58373 . Il ‘FutureRelease’ stato significa che la prossima versione di Android dovrebbe risolvere, presumibilmente la prossima 4.4.
    • Grazie @jrr ho nexus4 4.3 aggiornamento – e non sto avendo stesso problema. Capito questo, dopo 2 giorni a leggere il tuo commento. Quindi per fare il debug nativo Sia I root il mio nexus4 e di provare o di applicare android 4.3 immagine fresca (perdere tutti i dati sul telefono) o aspettare un po ‘ per android 4.4 aggiornamento.

  2. 2

    Ho avuto lo stesso problema oggi con Samsung Galaxy S con rom MIUI. ndk-gdb sempre riferito “non Poteva estrarre il pacchetto di dati di directory. Sei sicuro che la tua applicazione installata è debuggable?”

    Si è scoperto il motivo è che correre-come non funzionante a causa di /data/data link simbolico. Cyanogen è utilizzato personalizzato ROM. Per rimuovere il collegamento simbolico e spostare tutti i file da /datadata in /data/data risolto il problema.

    Cyanogen 2.3 fix:

    ndk-gdb si basa su “esegui come” comando, il che rende una serie di controlli sull’ /data/data directory. In Cyanogen 2.3, è un link simbolico, e come riesce con un messaggio criptico, e ndk-gdb non riesce a restituire con [2]:

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

    È di ricreare /dati/dati con collegamento simbolico :

    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/

    Speranza che aiuta gli altri con problemi simili. Controllare per vedere se esegui come funziona come previsto o non. Non è perché il binario non è debuggable. ndk-gdb messaggio di errore è molto fuorviante.

  3. 1

    Avuto un problema simile e l’esecuzione di:

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

    sarebbe uscita:

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

    soluzione è disinstallare sul dispositivo e poi reinstallare da linea di comando tramite:

    adb install MyApkFile.apk
  4. 0

    Ho anche avuto questo problema e ha scoperto che può essere causato da un corto di nomi di pacchetti!

    Durante il test di un dispositivo Android 2.2 del sistema con un’applicazione che ha avuto un pacchetto con 3 livelli (e.g: un.b.c) ndk-gdb non avrebbe funzionato. Cambiare la confezione con 4 o più livelli (ad esempio un.b.c.d) o in esecuzione su Android 2.3 o versioni successive risolto il problema.

    vedere http://code.google.com/p/android/issues/detail?id=13965 per ulteriori informazioni.

  5. 0

    C’è ancora un’altra possibilità per questo problema si verifica: se avete già installato l’applicazione come applicazione di sistema (/system/app), disinstallato e poi installato, ancora una volta, come una normale applicazione. In questo caso è possibile che c’è ancora qualche file residuo che l’applicazione non può accedere perché non ha le autorizzazioni.

    Ho risolto disinstallando la mia applicazione e la rimozione manuale di ogni pezzo di informazioni relative ad esso (con adb shell e i privilegi di root). Per quanto ne so, che comprende:

    • Tutto in /data/data/<pacchetto app>
    • Il file chiamato /data/dalvik-cache/* <pacchetto app>*

    Dopo l’installazione di nuovo, non è stato in grado di eseguire il debug dell’applicazione di nuovo.

  6. 0

    Nel caso In cui qualcuno è per l’uso di Samsung Galaxy S4/… e l’ho 4.4.2 (ultima rom stock – ormai in tutti i paesi) – è fregato! Samsung bug. Quindi, con root, come spiegato in una delle risposte di cui sopra, o di ottenere un altro dispositivo…
    Un’altra soluzione è quella di tornare ad Android 4.2.2 (non 4.4.2) – pre 4.3 versione con cui è iniziato questo problema.

Lascia un commento