如何通过终端运行特定应用的动作?


13

我需要通过SSH从远程计算机上运行我的android应用程序,但我不是命令行专家,所以我想知道:如何运行应用程序的特定操作?(不仅仅是打开它)这意味着:如何知道应用程序可能执行的操作的确切罪过?

例如:我想从计算机上的手机上启动录音应用程序,并从远程开始录音。可能吗?

谢谢,安德里亚

Answers:


12

用这个:

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(假名)作为命令的最后一部分。

获取应用程序的程序包名称很容易,但是获取操作的类名称则不容易。有两个问题:

  1. 许多应用程序开发人员将班级信息保密。

  2. 并非所有开发人员都进行智能模块化编程。将应用程序划分为多个类(这可能是由意图触发的)是一个好习惯,但并非所有开发人员都很聪明。

第一个问题的解决方案:使用apktool反编译应用程序,然后查看所有信息。还有其他方法,但是这种方法始终有效(除非应用程序基于NDK而不是SDK)。

第二个问题的解决方案:什么都没有。

不用担心,大多数流行的应用程序都遵循最佳编程实践,它们可Public API为您提供获取类信息的方法。


您能否在参数<package_name>和上添加一些解释<full_class_name>,以及如何获取它们?在我看来,至少后者还不清楚。
伊齐

@Izzy添加了说明...再次查看答案。
Android Quesito 2012年

谢谢!从我+1:D简洁易懂。如果您不介意的话,我会自由添加一些链接,因为apktools(非开发人员否则可能会认为它是SDK的一部分并迷路了;)
Izzy

@Izzy这是我的问题:我无法启动“设置活动”应用:com.android.settings/.Settings$StorageSettingsActivity。自己尝试。实际上,$符号后的字符串是什么?它像是“设置”活动中的子类吗?
Gokul NC

@GokulNC,您可能需要用引号将所有内容引起来(单引号),或者$StorageSettingsActivity可能被视为变量并“扩展”为空字符串(除非该名称定义了变量)。
伊齐

9

就像Sachin Shekhar所说的那样,您必须使用以下命令:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

看一个具体的例子:

  • 从您的Android设备或任何Market位置获取apk文件
  • 运行此命令:

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的一部分


1
:D测试它,它有魅力。这是一个现实生活中的工作示例。
Gilles Quenot 2012年

2
运气和计算机科学完全相反。这是一条相对的道路。
Gilles Quenot 2012年

2
不,您可以省略com.android.settingsPATH,这就是为什么我说它是相对的。在您想要的任何应用上进行测试。
Gilles Quenot 2012年

2
我并不是说它不能与其他应用程序一起使用。类名前面的点很神奇。但是,这不应该被鼓励。
Android Quesito 2012年

1
您说的很幸运,事实并非如此。您是否有主张的依据?为什么不应该鼓励这样做呢?
吉尔斯·奎诺
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.