Determine if running on a rooted device

后端 未结 24 2256
無奈伤痛
無奈伤痛 2020-11-22 06:43

My app has a certain piece of functionality that will only work on a device where root is available. Rather than having this feature fail when it is used (and then show an a

24条回答
  •  栀梦
    栀梦 (楼主)
    2020-11-22 07:01

        public static boolean isRootAvailable(){
                Process p = null;
                try{
                   p = Runtime.getRuntime().exec(new String[] {"su"});
                   writeCommandToConsole(p,"exit 0");
                   int result = p.waitFor();
                   if(result != 0)
                       throw new Exception("Root check result with exit command " + result);
                   return true;
                } catch (IOException e) {
                    Log.e(LOG_TAG, "Su executable is not available ", e);
                } catch (Exception e) {
                    Log.e(LOG_TAG, "Root is unavailable ", e);
                }finally {
                    if(p != null)
                        p.destroy();
                }
                return false;
            }
     private static String writeCommandToConsole(Process proc, String command, boolean ignoreError) throws Exception{
                byte[] tmpArray = new byte[1024];
                proc.getOutputStream().write((command + "\n").getBytes());
                proc.getOutputStream().flush();
                int bytesRead = 0;
                if(proc.getErrorStream().available() > 0){
                    if((bytesRead = proc.getErrorStream().read(tmpArray)) > 1){
                        Log.e(LOG_TAG,new String(tmpArray,0,bytesRead));
                        if(!ignoreError)
                            throw new Exception(new String(tmpArray,0,bytesRead));
                    }
                }
                if(proc.getInputStream().available() > 0){
                    bytesRead = proc.getInputStream().read(tmpArray);
                    Log.i(LOG_TAG, new String(tmpArray,0,bytesRead));
                }
                return new String(tmpArray);
            }
    

提交回复
热议问题