zoukankan      html  css  js  c++  java
  • 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:



  • 相关阅读:
    记录下首次开通流量主,开心开心
    微信小程序之本地缓存
    在使用ef的情况下,有Migrations文件,想要直接生成数据库
    CSS 设置圆角div和阴影效果
    小程序UI库(UI组件)
    没有找到可以构建的 NPM 包---小程序开发
    php 接口参数对象转数组方法
    tp5框架获取随机n条
    php图片上传base64接口上传
    php如何实现定时任务,php定时任务方法,最佳解决方案,php自动任务处理
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6839146.html
Copyright © 2011-2022 走看看