他の人が説明しているように、シェルから直接起動できる独立したアプリケーションを開発することは可能ですが、コードは Android アプリケーション フレームワーク内で実行されるようです。したがって、実行可能ファイルはなく、代わりに Dalvik クラス ファイルとネイティブ共有オブジェクトを含む他のリソースを含む APK があります。
APK でアプリケーションを起動するには、いくつかの手順が必要です
- system_server プロセスは、アプリケーションを要求するインテントを受け取ります。
- Zygote プロセスは、新しいプロセスをフォークしてクラスのメソッドを実行するように指示されます。
- アプリケーションは新しいプロセスで実行されます。
am
実行可能ファイルを gdbserver に渡して APK を直接起動することはできませんが、コマンドを使用してシェルから起動するのはかなり簡単です。
$ 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 にブレークポイントをアタッチして設定する機会を与えます。