使用root Android Application运行二进制文件

时间:2011-06-22 21:49:17

标签: java android unix android-ndk native

我希望在/dev/local命名为native(我通过adb推送它),以root权限运行二进制文件。 为了实现这一点,我写了以下代码:

    try {
        root=Runtime.getRuntime().exec("su");
        DataOutputStream os = new DataOutputStream(root.getOutputStream());
        DataInputStream osRes = new DataInputStream(root.getInputStream());
        os.writeBytes("/data/local/native\n");
        os.flush();
        TextView output=(TextView)findViewById(R.id.textview);
        output.append(osRes.readLine());
        root.waitFor();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        Toast.makeText(this, e.toString() , Toast.LENGTH_SHORT).show();
    }

这给了我NullPointerException。所以,我尝试将其更改为:

    try{
        root=Runtime.getRuntime().exec("su");
        root.waitFor();
        DataOutputStream os = new DataOutputStream(root.getOutputStream());
        DataInputStream osRes = new DataInputStream(root.getInputStream());
        os.writeBytes("/data/local/native\n");
        os.flush();
        TextView output=(TextView)findViewById(R.id.textview);
        output.append(osRes.readLine());
        root.waitFor();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        Toast.makeText(this, e.toString() , Toast.LENGTH_SHORT).show();
    }

有了这个,我得到了BrokenPipe错误。

请帮助我,我想运行具有root权限的二进制文件,有没有其他方法或者我做错了什么?

3 个答案:

答案 0 :(得分:1)

尝试运行su -c /path/to/executable

答案 1 :(得分:0)

我已多次回答并帮助其他人。请试试这个:

Usage: Run(new String[]{"/system/bin/sh", "-c", "su"});

public String Run(String[] cmd) {
    StringBuffer theRun = null;
    try {
        Process process = Runtime.getRuntime().exec(cmd);

        BufferedReader reader = new BufferedReader(
                new InputStreamReader(process.getInputStream()));
        int read;
        char[] buffer = new char[4096];
        StringBuffer output = new StringBuffer();
        while ((read = reader.read(buffer)) > 0) {
            theRun = output.append(buffer, 0, read);//output
        }
        reader.close();
        process.waitFor();

    } catch (IOException e) {
        throw new RuntimeException(e);
    } catch (InterruptedException e) {
        throw new RuntimeException(e);
    }
        return theRun.toString();//return output
}

此外,此链接很有用:http://www.stealthcopter.com/blog/2010/01/android-requesting-root-access-in-your-app/

答案 2 :(得分:-1)

我知道我的答案很晚,但如果你仍然面对这个问题,我就是这样做的。我还必须使用root权限运行二进制文件。我尝试了几种方法,比如将二进制文件放在/ system / app文件夹中,系统应用程序从这里运行,因此具有root权限。但它没有用。因此,我必须修改su.c文件并重新编译内核,如THIS站点中所述。如果重新编译内核不是一个选项,您可以尝试在roottool(如busybox)中进行相同的更改并重新编译。您现在可以使用“busybox su -c”而不仅仅是“su -c”。