Mentre è possibile sviluppare applicazioni free standing che possono essere avviate direttamente dalla shell come altri stanno descrivendo, sembra che il codice venga eseguito all'interno del framework dell'applicazione Android. Pertanto, non si dispone di un eseguibile e si dispone di un APK che contiene i file di classe Dalvik insieme ad altre risorse, incluso l'oggetto condiviso nativo.
Avvio di un'applicazione in un APK seguenti fasi
- Il processo system_server riceve un intento che richiede l'applicazione.
- Il processo di zigote viene indicato per eseguire un nuovo processo ed eseguire un metodo della classe.
- L'applicazione viene eseguita nel nuovo processo.
Anche se non è possibile avviare un APK direttamente passando un eseguibile gdbserver, la sua abbastanza facile da innescare un lancio dalla shell con il comando am
.
$ adb -d shell
# am
usage: am [subcommand] [options]
start an Activity: am start [-D] <INTENT>
-D: enable debugging
send a broadcast Intent: am broadcast <INTENT>
start an Instrumentation: am instrument [flags] <COMPONENT>
-r: print raw results (otherwise decode REPORT_KEY_STREAMRESULT)
-e <NAME> <VALUE>: set argument <NAME> to <VALUE>
-p <FILE>: write profiling data to <FILE>
-w: wait for instrumentation to finish before returning
start profiling: am profile <PROCESS> start <FILE>
stop profiling: am profile <PROCESS> stop
<INTENT> specifications include these flags:
[-a <ACTION>] [-d <DATA_URI>] [-t <MIME_TYPE>]
[-c <CATEGORY> [-c <CATEGORY>] ...]
[-e|--es <EXTRA_KEY> <EXTRA_STRING_VALUE> ...]
[--ez <EXTRA_KEY> <EXTRA_BOOLEAN_VALUE> ...]
[-e|--ei <EXTRA_KEY> <EXTRA_INT_VALUE> ...]
[-n <COMPONENT>] [-f <FLAGS>] [<URI>]
# am start -n com.android.browser/.BrowserActivity
Starting: Intent { cmp=com.android.browser/.BrowserActivity }
#
Una volta che l'applicazione è in esecuzione, utilizzare gdbserver --attach <pid>
come avete davanti. Se sei fortunato, la tua applicazione attende l'interazione dell'utente prima di chiamare il tuo codice nativo per darti la possibilità di allegare e impostare i tuoi punti di interruzione in GDB.
fonte
2010-05-07 19:55:13