回答:
これを使って:
am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>
アプリを制御するには、コマンドの<package_name>
と<full_class_name>
に正しい値を入力する必要があります。たとえばcom.google.gmail/com.google.gmail.check_mail
、コマンドの最後の部分として(仮名)を使用できます。
アプリのパッケージ名を取得するのは簡単ですが、アクションのクラス名を取得するのは簡単ではありません。2つの問題があります。
多くのアプリ開発者は、クラス情報を非公開にします。
すべての開発者がスマートモジュラープログラミングを行うわけではありません。意図によってトリガーされる可能性のある複数のクラスにアプリを分割するのは良い習慣ですが、すべての開発者が賢いわけではありません。
最初の問題の解決策:apktoolを使用してアプリを逆コンパイルし、すべての情報を確認します。他の方法もありますが、これは常に機能する方法です(アプリがSDKではなくNDKに基づいている場合を除く)。
2番目の問題の解決策:なし。
心配する必要はありません。ほとんどの人気アプリはプログラミングのベストプラクティスに従っており、Public API
クラス情報を取得するために使用できます。
apktools
(開発者以外はSDKの一部であると考えて迷子になるかもしれません;)
com.android.settings/.Settings$StorageSettingsActivity
。この設定のアクティビティアプリを起動できません。自分で試してみてください。実際、$
記号の後の文字列は何ですか?設定アクティビティのサブクラスのようなものですか?
$StorageSettingsActivity
変数として表示され、空の文字列に「展開」される場合があります(その名前で定義された変数がない場合)。
Sachin Shekharが言ったように、次のコマンドを使用する必要があります。
am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>
具体例をご覧ください。
aapt dump xmltree com.android.settings*.apk AndroidManifest.xml
「テザリング」メニューを開始したいので、出力でアクティビティを検索します。
(...)
E: activity (line=190)
A: android:name(0x01010003)=".TetherSettings" (Raw: ".TetherSettings")
(...)
最終的なコマンドは次のとおりです。
am start -a android.intent.action.MAIN -n com.android.settings/.TetherSettings
aapt
コマンドは、の一部であり、AndroidのSDK
com.android.settings
PATH を省略できます。だから私はそれが相対的だと言ったのです。好きなアプリでテストしてください。
<package_name>
と<full_class_name>
、およびそれらの入手方法に関する説明を追加できますか?私には、少なくとも後者は明確ではありません。