虽然有可能开发出可以直接从壳为他人所描述推出独立的应用程序,这听起来像你的代码Android应用程序框架内运行。因此,您没有可执行文件,而是有一个APK包含您的Dalvik类文件以及其他资源(包括您的本机共享对象)。
启动在APK应用程序包括几个步骤
- 的system_server过程中接收到一个请求的意图您的应用程序。
- 受精卵过程叫叉掉一个新的进程和运行类的方法。
- 您的应用程序在新的进程中运行。
尽管无法通过将可执行文件传递给gdbserver来直接启动APK,但使用am
命令可以很容易地从shell启动它。
$ 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 }
#
一旦您的应用程序正在运行,使用gdbserver --attach <pid>
就像您以前一样。如果幸运的话,您的应用程序会在调用您的本机代码之前等待一些用户交互,以便您有机会在GDB中附加和设置断点。