Answers:
用这个:
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
(假名)作为命令的最后一部分。
获取应用程序的程序包名称很容易,但是获取操作的类名称则不容易。有两个问题:
许多应用程序开发人员将班级信息保密。
并非所有开发人员都进行智能模块化编程。将应用程序划分为多个类(这可能是由意图触发的)是一个好习惯,但并非所有开发人员都很聪明。
第一个问题的解决方案:使用apktool反编译应用程序,然后查看所有信息。还有其他方法,但是这种方法始终有效(除非应用程序基于NDK而不是SDK)。
第二个问题的解决方案:什么都没有。
不用担心,大多数流行的应用程序都遵循最佳编程实践,它们可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>
,以及如何获取它们?在我看来,至少后者还不清楚。