应用程序的Android“永久”超级用户权限?

时间:2012-09-14 19:20:50

标签: android process runtime exec root

为了澄清,我使用此代码获取我的应用程序的超级用户权限,以便我可以访问root和whatnot:

    public String runProcess(String[] functs) {

    DataOutputStream dos;
    DataInputStream dis;
    StringBuffer contents = new StringBuffer("");
    String tempInput;
    Process process;

    try {
        process = Runtime.getRuntime().exec(functs);
        dos = new DataOutputStream(process.getOutputStream());
        dis = new DataInputStream(process.getInputStream());

        for (String command : functs) {
            dos.writeBytes(command + "\n");
            dos.flush();

            while ((tempInput = dis.readLine()) != null)
                contents.append(tempInput + "\n");

        }

        dos.writeBytes("exit\n");
        dos.flush();
        process.waitFor();
    } catch (Exception e) {
        e.printStackTrace();
    }

    return contents.toString();

}

虽然它工作得很好,每当我调用runProcess(new String[] { "su", "-c", "some other command" });时,它总是要求超级用户权限。我看到市场上有很多根应用程序只需要在每次启动应用程序时获得超级用户权限,但我认为每次应用程序调用函数时我都不需要要求用户获得超级用户权限这需要SU。所以我的问题是,如何在应用程序启动时提示用户给我一次SU权限,而不必为每个与SU相关的操作不断要求它?

编辑:我知道我可以运行我的方法/ Runtime.getRuntime()。exec()方法,而不是每次都输入“su”,但这只适用于非su相关的操作(即exec(“ps”) )或执行(“ls”)。任何想法?

3 个答案:

答案 0 :(得分:1)

您可以使用我的库来执行此操作。

https://code.google.com/p/roottools/

此外,如果您不想使用该库,则可以使用该源,这样您就可以删除我的代码并在您的应用程序中使用它。

以下是源代码的链接:

https://code.google.com/p/roottools/source/browse/#svn%2Ftrunk%2FStable%2FRootTools-sdk3-generic%2Fsrc%2Fcom%2Fstericson%2FRootTools

答案 1 :(得分:1)

如果您只是在设备中已经运行的“超级用户”应用程序中查找权限,则只需在主java文件中使用以下代码即可。

try {
        process p= Runtime.getRuntime().exec(su);
    }

catch (IOException e) {
      e.printStackTrace();
   }

是的,无需提及该设备必须已经扎根!!!

答案 2 :(得分:0)

每次打开一个要求root访问权限的控制台,即用su启动它时,相应的超级用户应用会提示您或允许/拒绝它,如果您选中了“不要问我”再次“在之前的提示上。

如果您只想询问(超级用户应用程序)一次,则必须通过不调用dos.writeBytes("exit\n");来保持根控制台处于打开状态。 然后将此会话保存在后台线程中,并在必要时使用它。

因此要么确保用户在第一次提示时检查“不要再问我”,要么保持会话开放。