【问题标题】:Android: How to execute shell command 'rm' in appAndroid:如何在应用程序中执行 shell 命令“rm”
【发布时间】:2013-09-09 10:21:23
【问题描述】:

我可以轻松地从 adb shell 使用“rm /data/system/[file]”,但从应用程序这不起作用。

命令“du”、“ls”、“echo”在代码中工作正常,但命令“rm”不起作用。它甚至不适用于 sdcard。

我尝试过的代码:

1)

String[] cmd = { "/system/bin/sh", "-c", "rm -r /sdcard/1" }; 
    try {

        Process process = Runtime.getRuntime().exec(cmd);//execute command

        //read the output of command
        InputStreamReader reader = new InputStreamReader(process.getInputStream()); 
.....

2) 与 (1) 相同的代码,用“su”代替“/system/bin/sh”

3)

process=Runtime.getRuntime().exec("/system/bin/sh");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("rm -r /sdcard/1\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
process.waitFor();

4) 与 (3) 相同的代码,用 'su' 代替 '/system/bin/sh'

【问题讨论】:

  • java.nio.file.Files 似乎无法访问。我尝试了 java.io.File,但它的删除功能不起作用。
  • 您的应用程序是该文件的所有者吗?
  • 不,不是。它是一个系统文件,来自'/data/system/'。不能root允许访问这个目录吗?
  • 没有。 adb shell 是一个开发工具,只有打开 USB 调试才能工作。不要依赖那个设置。

标签: android shell


【解决方案1】:

进入开发者模式启动设置,用.anr文件调试,然后用dex文件编译inertpreteor开始启动rm命令

【讨论】:

    【解决方案2】:

    您可以在您的应用字段结构

    删除文件

    我的意思是:/data/data/com.mycompany.myapp

    [我不确定你是否可以删除其他地方的文件,因为需要 sudo]

    所以,就这样吧:

    String cmd="rm -f /data/data/com.mycompany.myapp/myfile.txt";
    try
      {
      Runtime.getRuntime().exec(new String[]{"sh","-c",cmd});
      }
      catch(Exception e){}
    
    • -f 强制删除 [可选]
    • 例外情况 {} 由您决定

    【讨论】:

      猜你喜欢
      • 2011-02-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-31
      • 1970-01-01
      • 2013-03-12
      相关资源
      最近更新 更多