判断手机有没有被root
2013年5月31日 16:53
原文链接
http://code.google.com/p/roottools/
if (RootTools.isRootAvailable()) { // your app has been granted root access } if (RootTools.isAccessGiven()) { // your app has been granted root access }
/** * @author Kevin Kowalewski * */ public class Root { private static String LOG_TAG = Root.class.getName(); public boolean isDeviceRooted() { if (checkRootMethod1()){return true;} if (checkRootMethod2()){return true;} if (checkRootMethod3()){return true;} return false; } public boolean checkRootMethod1(){ String buildTags = android.os.Build.TAGS; if (buildTags != null && buildTags.contains("test-keys")) { return true; } return false; } public boolean checkRootMethod2(){ try { File file = new File("/system/app/Superuser.apk"); if (file.exists()) { return true; } } catch (Exception e) { } return false; } public boolean checkRootMethod3() { if (new ExecShell().executeCommand(SHELL_CMD.check_su_binary) != null){ return true; }else{ return false; } } } /** * @author Kevin Kowalewski * */ public class ExecShell { private static String LOG_TAG = ExecShell.class.getName(); public static enum SHELL_CMD { check_su_binary(new String[] {"/system/xbin/which","su"}), ; String[] command; SHELL_CMD(String[] command){ this.command = command; } } public ArrayList<String> executeCommand(SHELL_CMD shellCmd){ String line = null; ArrayList<String> fullResponse = new ArrayList<String>(); Process localProcess = null; try { localProcess = Runtime.getRuntime().exec(shellCmd.command); } catch (Exception e) { return null; //e.printStackTrace(); } BufferedWriter out = new BufferedWriter(new OutputStreamWriter(localProcess.getOutputStream())); BufferedReader in = new BufferedReader(new InputStreamReader(localProcess.getInputStream())); try { while ((line = in.readLine()) != null) { Log.d(LOG_TAG, "--> Line received: " + line); fullResponse.add(line); } } catch (Exception e) { e.printStackTrace(); } Log.d(LOG_TAG, "--> Full response was: " + fullResponse); return fullResponse; } }