分享好友 最新动态首页 最新动态分类 切换频道
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:      }
最新文章
这些豫企相当潮丨一只“雨燕”翱翔AI时代——来自麒麟合盛网络技术股份有限公司的调研报告
  企业家名片  李涛,麒麟合盛网络技术股份有限公司(APUS)董事长兼CEO,1999年进入互联网行业,2014年创办APUS,见证了中国互联网乃至全球互联网起起伏伏的发展历程,凭借敏锐的市场洞察力,对我国互联网、大数据、云计算、移动安全
星尘智能发布AI机器人Astribot S1
  上证报中国证券网讯(记者 孙小程)近日,星尘智能发布新一代AI机器人Astribot S1。在未经加速处理的视频中,S1机器人通过模仿学习,在家居、工作场景中执行一系列对人有用的复杂任务。公司表示,S1已接入大模型测试,能像人一样学习、
首个被人类骗钱骗感情的AI出现了
一段话,让 AI 给我打几万美元。爽文都不敢想的情节,发生在了现实之中。事实上并没有。11 月 29 日,Freysa 累计和 195 名人类聊了 482 次,被骗走约 4.7 万美元。12 月 2 日,在和 330 名人类周旋之后,Freysa 又一次被骗走约 1.3 万美元
耐玩又不氪金的手游排行榜
简介:  3733游戏盒子集合全网公益服手游,包括BT版、满VIP版、GM版、无敌汉化版等,内置的游戏,充值低至0.1折,可20倍加速,让任务/跑环更轻松。3733游戏盒还重磅打造帐号交易与小号回收功能,小号不玩,官方高价回收。此外,盒子还拥
刘春雄:快消品时代之问:新增长与高效率 | 营销盛典分享
12月6日至7日,以“越关山·突破周期,创新增长”为主题,由销售与市场杂志社与安得智联主办,名仁苏打水、淘工厂・淘宝买菜赞助的第二十一届中国营销盛典暨第二届中国消费品新供应链新增长大会在广东佛山顺德如期举行,来自不同领域的品牌
最好的Google关键词长尾词查找挖掘工具 – 2019收藏版
英文SEO内容优化是一个复杂的系统工程,要提高这项工作的能力,除了应该具备一套完整的结构化思维之外,找到一个好用的工具能够极大的提高工作效率。1.  AdWordSEO Keyword Permutation Generator想找到更多的关键词组合,这个工具可以轻
谷歌推广是什么?谷歌推广怎么做?
谷歌推广是什么? GoogleAds,原名GoogleAdWords,是Google公司主要的广告服务产品。AdWords是一种在Google搜索结果页展示的按点击付费的关键字广告。 谷歌推广怎么做? 一:外贸网站建设 外贸网站建设是谷
服装品牌策划方案(大全8篇)
随着市场经济的飞速发展,女性的生活品味、生活质量,正在发生着质的飞跃,饰物与服装也实现了完美结合。下面是本站小编为你带来的服装品牌策划方案范文,欢迎参阅。一、专场活动名称:源于自然 演绎时尚——---------专业毕业设计作品展示
该股的最大炒作亮点是什么?潜在题材又是什么?验证成为手机用户,查看该股万隆原创动态分析报告
老铁们,今天行情,如果没有昨天那个会议利好和高开的走势,老白会觉得微涨还不错,加上美股那边已经跌了两天,而A股则是连涨两天,但是现在的情况好像是昨天那波高开低走是消失了一样,一点都没影响到A股,今天来到了3432点,成交量也有1.
国际站店铺装修指南:打造高转化率的视觉营销空间
尊敬的店主,您是否曾遇到这样的情况:您精心挑选了商品,却发现销售效果并不理想,顾客在进入店铺后很快流失?不用担心,今天就为大家分享一份宝贵的指南,教您如何打造一个高转化率的视觉营销空间。第一步:合理规划空间布局第二步:选用
相关文章
推荐文章
发表评论
0评