我能使用adb shell发送命令给我的应用程序吗?

9
我希望找到一种方法,可以使用adb shell或类似工具创建命令,并将其发送到我的应用程序。这样,我就可以在更改任何内容时不必每次重新加载应用程序,而是进行一些小的更改。
有没有一种方法可以打开adb shell并向正在运行的应用程序发送命令?
如果不可能,那么有什么可能的方法可以发送命令到我的应用程序,以便我可以执行诸如(移动UI元素)或(从URL创建文件)等操作?基本上,我想能够向我的应用程序发送字符串命令.....
如果我可以使用命令行工具做到这一点,那就太好了。否则,有什么好的方法可以解决这个问题呢?
2个回答

8

从adb shell中,输入am。您可以启动活动和服务,以及发送广播意图。不带参数将打印使用信息。

如果要从脚本中调用此命令,则可以从主机机器上执行adb shell am <command>


1
你可以发送任何可以编码为Intent的命令。 :) http://developer.android.com/reference/android/content/BroadcastReceiver.html 解释了如何处理广播意图。 - adamp
我想补充一点,如果你不希望其他人能够向你的应用发送相同的命令,那么在发布版本中最好不要将类似这样的代码留在应用中。 - adamp
1
好的,我已经注意到了。我正在使用这个来进行开发。由于我正在使用Monodroid,我可能会添加一个#if或类似的东西,在发布时将其排除在外。 - The Lazy Coder
请问,我已经使用adb shell am启动了一个活动。该活动可能会使用Log.d()来记录一些内容。但是这些日志不会显示在主机命令提示符上。我该如何将日志重定向到标准输出?实际上,我只是想让活动执行有一个结果,并让我的shell脚本获取它。我希望像这样使用VAR="$(adb shell am start <command> | grep result)" - Yeung
好的,我认为我可以从adb logcat -d | grep ...中获取它。 - Yeung
显示剩余3条评论

4

adb shell am 选项可能是最干净/最好/最棒的选项,但您可以在应用程序中创建一个线程来检查SD卡上特定文件的存在。类似以下代码(不要在没有严格修改的情况下使用此代码):

public void run()
{
   File f = new File("/sdcard/appcommands");
   while(!stop){
      if(f.exists()){
         // read file
         // obey commands
         // remove file or use some other timing monitor
      }
   }
}

如果实在没有其他选择,你可以使用adb push命令来写入命令文件。虽然这种方法效率低下,但在紧急情况下可行。另外,你还可以进行更复杂的操作,例如创建本地TCP/HTTP服务器和使用adb端口转发,但这可能有些过度。


被投票为创意快速解决方案。但我可能会接受adb shell am作为我的解决方案。我只需要获取更多关于它的信息。 - The Lazy Coder
您也可以通过监听广播方式,而不是 while(!stop) 循环,通过 adb push 继续向应用程序推送命令。这将允许向应用程序发送更复杂的数据。 - Dmitry Zaytsev

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接