雖然有可能開發出可以直接從殼爲他人所描述推出獨立的應用程序,這聽起來像你的代碼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中附加和設置斷點。