【问题标题】:What is the difference between Runtime.exec() and running shell commands in a terminal on androidRuntime.exec() 和在 android 的终端中运行 shell 命令有什么区别
【发布时间】:2020-01-15 03:52:45
【问题描述】:

我的摩托罗拉 G6 已植根,我有一个应用程序应该写入根文件以在主机模式和设备模式之间切换。文件如下:

/sys/class/power_supply/usb/usb_otg

在安卓终端模拟器中输入以下命令:

$    su
#    echo 3 > /sys/class/power_supply/usb/usb_otg

这些命令将使手机进入主机模式。我知道这是因为手机已连接到光谱仪,并且在我执行此命令时它已通电。

在测试这些命令后,我将以下代码放入我的应用程序中:

toastMessage("Attempting to power up spectrometer");
Runtime.getRuntime().exec("su");
Runtime.getRuntime().exec("echo 3 > /sys/class/power_supply/usb/usb_otg");
toastMessage("Reached this point");

这段代码似乎没有任何错误,它运行到最后但它没有为光谱仪供电。

我的问题是为什么这些命令可以在 Android Terminal Emulator 中运行,但不能通过 Runtime.exec() 运行?

【问题讨论】:

    标签: java android shell terminal sh


    【解决方案1】:

    您需要使用此代码

        toastMessage("Attempting to power up spectrometer");
        Runtime.getRuntime().exec("su -c \"\"echo 3 > /sys/class/power_supply/usb/usb_otg");
        toastMessage("Reached this point");
    

    你需要在一个代码中执行 su 和其他代码。 第二次执行运行时代码时,它将在没有 su 权限的情况下执行。

    【讨论】:

    • 谢谢,我会尽快尝试,但是自从我发布这个问题后,我在某处读到 Runtime.exec() 以一种相当不直观的方式处理空白,这可以解释为什么我的代码不起作用,你知道是不是这样吗?如果是这样,你的代码还能工作吗?
    • 我的代码运行良好(我在我的应用程序中使用它),你需要这样使用它:su "echo something",但是这个"是特殊字符,所以你需要使用它与\ "
    • 太好了,它现在似乎也适用于我的代码。谢谢帕维尔。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多