• android推断手机是否root


    关于推断手机是否已经root的方法。假设app有一些特殊功能须要root权限,则须要推断是否root。

    比方一些市场下载完app后自己主动安装。

    /**
     * @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;
        }
    
    }

    代码来自stackoverflow。向作者致敬。

    方法2:

    The RootTools library offers simple methods to check for root:

    一个开源项目:http://code.google.com/p/roottools/

    RootTools.isRootAvailable()推断是否root

    RootTools.isAccessGiven()返回true那么手机已经root而且app也被授予root权限。

    另外:据那片帖子的一个回贴人说使用

    String commandToExecute = "su";
    executeShellCommand(commandToExecute);
    private boolean executeShellCommand(String command){
        Process process = null;            
        try{
            process = Runtime.getRuntime().exec(command);
            return true;
        } catch (Exception e) {
            return false;
        } finally{
            if(process != null){
                try{
                    process.destroy();
                }catch (Exception e) {
                }
            }
        }
    }

    会引起很严重的性能问题,将手机系统拖的很慢,当应用多次启动后会创建出许多个僵死的进程耗用内存。
    參考http://stackoverflow.com/questions/1101380/determine-if-running-on-a-rooted-device

    To sum up; I have no advice for you to determine if device is rooted or not. But if I were you I would not use Runtime.getRuntime().exec().

    By the way; RootTools.isRootAvailable() causes same problem.
    The RootTools library offers simple methods to check for root:



  • 相关阅读:
    JSON 基础完结 yz
    HTML5 基础教程一 yz
    HTML5 基础教程二 yz
    ADO.NET 之 一 yz
    [ lucene高级 ] Lucene docid,UID mapping and Payload [转]
    [ mongoDB ] Wordnik的MongoDB使用经验 [转]
    [ mongoDB ] MongoDB 客户端推荐
    [ mongoDB ] mongoDB replSet 添加节点注意事项
    Trie树实现[ java ]
    [ mongoDB ] MongoDB 连接池
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6839146.html
Copyright © 2020-2023  润新知