分享好友 最新动态首页 最新动态分类 切换频道
android开发:获取Root权限
2024-12-27 04:07


  android是基于linux的操作系统,Google为了安全性的考虑,将每个应用列为独立的用户,用OS层的权限控制来保证应用间内容的可控。Linux下的root用户有最大的权限,有些涉及到文件系统或者底层的操作只能通过这种超级权限才能进行。
  要开发基于root的应用程序,需要目标机上装有superuser及busybox软件。前者是提权命令“su”的管理器,后者有基本的linux命令。

  网上有段代码,用于检测手机是否能获取到root权限

               1:  public static boolean isRooted() { 
               2:          Process p; 
               3:          try { 
               4:              // Preform su to get root privledges         
               5:              p = Runtime.getRuntime().exec("su"); 
               6:              // Attempt to write a file to a root-only         
               7:              DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
               8:              os.writeBytes("echo . >/system/root.txt
"); 
               9:              os.writeBytes("rm /system/root.txt
"); 
              10:              // Close the terminal         
              11:              os.writeBytes("exit
"); 
              12:              os.flush(); 
              13:              try { 
              14:                  p.waitFor(); 
              15:                  if (p.exitValue() != 255) { 
              16:                      return true; 
              17:                  } else { 
              18:                      Log.e(T, "Process Exit Value is : " + p.exitValue()); 
              19:                      return false; 
              20:                  } 
              21:              } catch (InterruptedException e) { 
              22:                  Log.e(T, e.getMessage(), e); 
              23:                  return false; 
              24:              } 
              25:          } catch (IOException e) { 
              26:              Log.e(T, e.getMessage(), e); 
              27:              return false; 
              28:          } 
              29:      } 


---------------
  经测试,此法在有些手机上运行不正常。这里我们采用RootTools-0.9.1-sdk3-generic.jar中提供的方法: 
  

               1:          // check for root on device         
               2:          if (!RootTools.isRootAvailable()) { 
               3:              // su binary does not exist, raise no root dialog         
               4:              未root 
               5:          } else { 
               6:              // su binary exists, request permission         
               7:              if (!RootTools.isAccessGiven()) { 
               8:                  未获得权限 
               9:              } else { 
              10:                  if (!RootTools.isBusyboxAvailable()) { 
              11:                  // checking for busybox needs root         
              12:                      未找到busybox 
              13:                  } 
              14:              } 
              15:          }


  如果要对系统分区进行写操作,就需要先将系统分区挂载为r/w模式。经测试,部分机型中不存在remount命令,因此此处采用直接执行命令的方式。
  此处的Process p为执行su命令后的process对象,即有root权限的Process。 
 

               1:  private static void remount(Process p, boolean ro) throws IOException { 
               2:          DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
               3:          DataInputStream is = new DataInputStream(p.getInputStream()); 
               4:          os.writeBytes("df -a /etc
");//获取/etc分区的挂载信息         
               5:          BufferedReader br = new BufferedReader(new InputStreamReader(is), 8192); 
               6:          String line = null; 
               7:          String filesystem = null; 
               8:          String mountedOn = null;
               9:   
              10:          while ((line = br.readLine()) != null) { 
              11:              line = line.trim(); 
              12:              Log.d(T, line); 
              13:              if (line.startsWith("/")) { 
              14:                  String[] blocks = line.split("\s+"); 
              15:                  filesystem = blocks[0]; 
              16:                  mountedOn=blocks[blocks.length-1]; 
              17:                  break; 
              18:              } 
              19:          } 
              20:          String cmd = null; 
              21:          if (ro) { 
              22:              cmd = MessageFormat.format("mount -o remount,ro {0} {1}
", 
              23:                      filesystem, mountedOn); 
              24:          } else { 
              25:              cmd = MessageFormat.format("mount -o remount,rw {0} {1}
", 
              26:                      filesystem, mountedOn); 
              27:          } 
              28:          Log.d(T, cmd); 
              29:          os.writeBytes(cmd); 
              30:      } 
              31:   


  root后的相关操作的执行主要还是使用linux系统基本命令来完成,busybox实现了大多数的linux命令。
  比如要写一个文件: 
   

               1:     final static String mOtherLines = "echo "{0}" >>/etc/tests
"; 
               2:                
               3:        private static void writeHostsFile(Process p, Vector<String> lines) throws IOException { 
               4:          DataOutputStream os = new DataOutputStream(p.getOutputStream()); 
               5:          remount(p, false); 
               6:          for (String l : lines) { 
               7:              os.writeBytes(MessageFormat.format(mOtherLines, l)); 
               8:          } 
               9:          remount(p, true); 
              10:          os.writeBytes("exit
"); 
              11:          os.flush(); 
              12:          try { 
              13:              p.waitFor(); 
              14:          } catch (InterruptedException e) { 
              15:              Log.e(T, e.getMessage(), e); 
              16:          } 
              17:      }
最新文章
长文控诉、爆猛料!OpenAI罗列12条“罪证”,痛斥马斯克“双面人”
AI科技圈的瓜又有新花絮,马斯克与OpenAI的“爱恨纠葛”大戏甚有看头。在经历了持续且猛烈的马斯克攻击波后,这一次OpenAI终于发起了反击。12条“罪证”美东时间周五,OpenAI在官网发布“大字报”长文,控诉马斯克是“”。文章开篇,OpenAI
国产高清精品软件:打造极致视觉体验
为了打造极致视觉体验,这些软件不断进行技术创新。它们采用了先进的算法和优化技术,提高了软件的运行效率和稳定性。通过对用户需求的深入研究,不断完善功能和界面设计,使得软件更加易于使用和操作。用户可以轻松地进行各种设置和调整,
站内优化和站外优化在 SEO 中的区别是什么
在网站优化(SEO)领域中,站内优化和站外优化是两个重要的概念。站内优化指的是对网站自身的结构、内容、技术等方面进行优化,以提高网站的搜索引擎排名。这包括网页标题、网页内容、网页结构、网页加载速度等。通过站内优化,可以让搜索引擎更
青州企业互联网转型升级新动力——专业网站推广优化服务助力前行
青州一家专业网站推广优化公司,致力于帮助企业实现互联网转型升级。通过精准定位、优化策略,助力企业提升品牌知名度,拓宽市场份额,助力企业迈向数字化时代。随着互联网技术的飞速发展,越来越多的企业开始意识到线上推广和网站优化的重
金舟windows优化大师官方版
金舟windows优化大师官方版是一款实用且强大的系统优化软件,它集成了C盘清理、大文件搬家、微信专清等多项功能,可以深入分析用户的电脑的状况,清理系统垃圾文件、临时文件、回收站以及浏览器缓存等无用文件,提高系统性能,从而让电脑运
铁路12306手机售票客户端 v5.8.0.4安卓版
百度CarLife华为版是一款支持手机和车机的车载互联语音出行助手,只需要将软件与汽车进行连接就能直接投屏分享到车载之中实现互联功能,接电话、发短信、听音乐等都可以语音进行操作,在驾驶途中提供方便快捷,解放双手,出行更安全。百度C
百度蜘蛛池租用:清风算法官网蜘蛛池,助力网站优化,提升搜索引擎排名
清风算法官网提供的蜘蛛池租用服务,助力网站优化,有效提升搜索引擎排名,助力企业网络营销。本文目录导读:清风算法官网蜘蛛池简介清风算法官网蜘蛛池的使用方法清风算法官网蜘蛛池的优势随着互联网的快速发展,搜索引擎优化(SEO)成为
迈威尔科技定制HBM解决方案:AI加速器性能大幅提升
近日,迈威尔科技(MRVL.US)宣布其在高带宽内存(HBM)领域的重大突破,将为人工智能处理器带来显著的性能提升。这项创新性的定制HBM解决方案是通过与美光科技、三星及SK海力士等主要内存设计公司的合作,实现的,旨在满足日益增长的AI计
高清美女写真生成神器!体验搜狐简单AI的魅力
限时免费,点击体验最近超火的AI生图神器,坐拥3000美女的大男主就是你! https://ai.sohu.com/pc/generate/textToImg?_trans_=030001_yljdaimn 在这个数字化的时代,如何创造出一个完美的‘自己’成了许多人的追求,尤其是想要通过AI技术
网站优化中的内部链接和外部链接?
对于网站优化而言,内部链接和外部链接一定是我们经常接触到的名词,但对于许多刚接触网站的朋友这两个名词可能会有些许陌生,因此,下面就来给大家讲讲这两个我们日后会经常接触到的名词。一、内部链接 指通过用户点击此超链接,将用户从
相关文章
推荐文章
发表评论
0评