【问题标题】:Android runtime exec stops if caller stops如果调用者停止,Android 运行时 exec 将停止
【发布时间】:2017-03-09 10:35:58
【问题描述】:

我正在使用有根的 android 平板电脑,我想执行 shell 命令行。但是,如果命令启动器应用程序停止,我已经看到它们会停止。尽管发起者应用程序停止,是否有任何方法可以保持 shell 命令的执行?

谢谢

这正是我想要执行的。我希望能够在我的应用中更新我的应用:

cmd 我想在我的应用程序中执行:

am force-stop myapp & install newVersionOfMyApp.apk & monkey -p myapp 1

然后,当执行命令的第一部分时,不会执行 rest。我已经看到这可以通过修改命令在其他操作系统中解决(windows 添加“cmd”,linux 在末尾添加“&”)。 Android有没有等价的方式?

【问题讨论】:

    标签: java android shell cmd apk


    【解决方案1】:

    我终于找到了解决方案。你可以把它放在 nohup 命令之后:

    nohup sh -c 'am force-stop myapp && install newVersionOfMyApp.apk && monkey -p myapp 1' &
    

    使用@syslogic 的信息编辑

    【讨论】:

    • 使用&&; 而不是& - 然后将按顺序处理命令(不需要at,甚至不知道要等待多长时间)。 & 运算符仅适用于分离一个命令(因此我会质疑“解决方案”)。
    【解决方案2】:

    您需要使用&(在命令后面)将 TTY 从控制台中分离出来;而当命令有exit 0(成功)或exit 1(错误)时,执行将停止。运行 cron-jobs 根本不需要任何控制台。我基本上想说的是,您可能应该重新考虑如何将命令放在那里 - 而adb shell 或 cron 不需要任何 GUI。

    还有 adb shell monkey - 而 MonkeyRunner 可能(同时)被支持库中的 UI Automator 替换。

    这是 MonkeyUI Automator

    我会这样写,bash - 在 PC 上 - 和 ADB:

    adb install -r com.acme.apk && adb shell monkey -p com.acme.AppName -v 500

    【讨论】:

    • 请阅读问题的编辑,我已经做了一些澄清。谢谢!
    • @jevora 刚刚发现,-r 开关可以让一个人替换已安装的 APK,而一个人也可以用 adb 启动猴子……它只需要一根 USB 电缆,但没有外壳终端Android 上的客户端(因此,在测试时也不会有任何干扰)。我可以看到这并不完全符合您的要求,但可能是最常见的方法。
    • 在使用 adb shell 时,这似乎是一个不错的解决方案。但是,当您尝试从应用程序(使用 Runtime.exec)内部执行命令行时,如果您不使用“nohup”,则一旦我强制停止调用者应用程序,命令执行就会停止。基本上,多亏了 nohup,我才能够更新进行更新的同一个 APP。就像谷歌播放更新本身时,它需要在安装 apk 后重新启动(这就是为什么我在安装 apk 后使用强制停止和猴子)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-06-03
    • 1970-01-01
    • 2023-03-10
    • 2014-11-04
    • 1970-01-01
    • 2012-07-11
    • 2022-01-01
    相关资源
    最近更新 更多