在android应用程序中获取错误“根访问被拒绝”

命令:[su]工作目录:null环境:空“运行此代码时出现错误,错误是”根访问被拒绝[java.io.IOException]:运行exec

try { suProcess = Runtime.getRuntime().exec("su"); DataOutputStream os = new DataOutputStream(suProcess.getOutputStream()); DataInputStream osRes = new DataInputStream(suProcess.getInputStream()); if (null != os && null != osRes) { // Getting the id of the current user to check if this is root os.writeBytes("id\n"); os.flush(); String currUid = osRes.readLine(); boolean exitSu = false; if (null == currUid) { retval = false; exitSu = false; Log.d("ROOT", "Can't get root access or denied by user"); } else if (true == currUid.contains("uid=0")) { retval = true; exitSu = true; Log.d("ROOT", "Root access granted"); } else { retval = false; exitSu = true; Log.d("ROOT", "Root access rejected: " + currUid); } if (exitSu) { os.writeBytes("exit\n"); os.flush(); } } } catch (Exception e) { Log.d("ROOT", "Root access rejected [" + e.getClass().getName() + "] : " + e.getMessage()); } 

Solutions Collecting From Web of "在android应用程序中获取错误“根访问被拒绝”"

这是因为应用程序在android系统中没有超级用户权限。

那么,首先…你需要让你的设备植根。 有一点谷歌search将帮助。

如果您的应用程序将在匿名客户端设备上运行,那么您应该首先检查设备是否已经生根。 我的库有一个根可用性检查方法,如下所示,但在less数情况下不起作用。

  public static boolean hasRoot() { String tags = Build.TAGS; if ((tags != null) && tags.contains("test-keys")) return true; try { if (new File("/system/app/Superuser.apk").exists()) return true; } catch (Exception exception) { exception.printStackTrace(); } String[] commands = { "/system/xbin/which su", "/system/bin/which su", "which su" }; for (String command : commands) { try { Runtime.getRuntime().exec(command); return true; } catch (Exception exception) { exception.printStackTrace(); } } return false; } 

然后,您可以继续执行您的过程来执行超级用户shell并检查uid。

或者,如果你想简化一些东西,你可以看看我的开源Android CLI库,这个任务会更简单。 你可以在这里findgithub项目。

如果您的手机具有root访问权限,那么您可以使用Process和Runtime类来启动shell脚本。

看到下面的链接: –

在android上以root身份运行一个shell命令?

http://en.wikipedia.org/wiki/Rooting_%28Android_OS%29