Si bien es posible desarrollar aplicaciones autónomas que se pueden iniciar directamente desde el shell como otros describen, parece que su código se ejecuta dentro del marco de aplicación de Android. Por lo tanto, no tiene un ejecutable y en su lugar tiene una APK que contiene sus archivos de clase Dalvik junto con otros recursos, incluido su objeto compartido nativo.
Inicio de una aplicación en un APK implica varios pasos
- El proceso system_server recibe una intención de solicitar su aplicación.
- Se le dice al proceso zygote que desvíe un nuevo proceso y ejecute un método de su clase.
- Su aplicación se ejecuta en el nuevo proceso.
Aunque no se puede poner en marcha un APK directamente por el paso de una ejecutable para gdbserver, su bastante fácil de desencadenar un lanzamiento desde el shell con el 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 vez que su aplicación se está ejecutando, utilice gdbserver --attach <pid>
como si tuviera antes. Si tiene suerte, su aplicación espera alguna interacción del usuario antes de llamar a su código nativo para darle la oportunidad de adjuntar y establecer sus puntos de interrupción en GDB.