【问题标题】:Run adb shell command using android code使用 android 代码运行 adb shell 命令
【发布时间】:2013-05-22 09:05:25
【问题描述】:
echo 0 > /sys/class/leds/button-backlight/brightness

上面的命令可以通过 adb shell 完美运行。但是当我尝试运行我的代码时没有任何效果。这是我的代码。

Process mSuProcess;
mSuProcess = Runtime.getRuntime().exec("su"); 
DataOutputStream mSuDataOutputStream = new DataOutputStream(mSuProcess.getOutputStream()); 
mSuDataOutputStream.writeBytes("echo 0 > /sys/class/leds/button-backlight/brightness \n");
mSuDataOutputStream.flush();
mSuDataOutputStream.close();

请帮我解决这个问题。

【问题讨论】:

  • 虽然你说你是“根”,但这并不一定意味着你有一个可用于此目的的su 二进制文件。看看您是否可以设法捕获 su 进程的 stdout /stderr 。还可以考虑安装 connectbot 之类的东西,并在设备上的交互式 shell 中尝试您的命令,这将作为应用程序用户 ID 运行,从而为您提供比 adb 更具可比性的案例。

标签: android shell adb android-notifications led


【解决方案1】:

如果您正在使用的设备没有植根,那么这可能无法正常工作..

【讨论】:

  • 运行shell而不是su,比如;处理 mSuProcess; mSuProcess = Runtime.getRuntime().exec("sh");
  • 请试试这个 mSuProcess.getOutputStream().writeBytes("echo 0 > /sys/class/leds/button-backlight/brightness \n");并通过“su”保持它
  • 请参考this.. 希望对您有所帮助
  • 你的代码应该可以工作..我看不出发生这种情况的任何原因..祝你好运
【解决方案2】:

google 原始的su 二进制检查UID 并且仅在rootshell 用户运行时才有效。这就是当您以交互方式从 adb shell 运行命令时它起作用的原因。为了从 Java 应用程序运行此代码,您需要使用修补过的 su 二进制文件 - 没有 UID 检查。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-28
    • 2016-12-13
    • 2021-11-06
    • 2011-03-04
    • 2011-02-06
    • 2014-12-05
    相关资源
    最近更新 更多