Android Root设备中的su权限获取和使用详解

原文地址:https://www.jb51.net/article/133719.htm

ROOT权限简介:

ROOT权限是Linux内核中的最高权限,如果你的身份是ROOT,那么你就具有了ROOT权限。有了最高权限,你就可以为所欲为,换句话说,如果恶意程序获取到了ROOT权限,那么就可以肆意地破坏你的手机,获取的隐私...所以厂商一般在生产手机的时候,不会提供给用户ROOT权限,官方宣称是为了保护用户手机的安全,然后装了一堆开机自动启动,而用户这辈子也用不到也卸载不了垃圾软件(相信使用安卓的同学们都懂我的意思),而苹果所说的越狱,也就是获取ROOT权限。

为什么需要获取ROOT权限?

苹果用户获取ROOT权限,是为了可以免费安装各种软件,以及为了获取更加灵活的操作体验,苹果不会安装一堆恶心的软件;而安卓普通用户获取ROOT权限,最大的目的就是为了卸载这些恶心的自带软件,安卓极客用户则是为了各种折腾安卓手机,安卓开发人员是为了得到日志文件,分析BUG。

我们开机之后,使用手机的身份就是一个普通用户(user),如果执行su,那么就可以直接切换到ROOT身份。就像仙剑奇侠传三里面的景天,是个凡人,法力有限,但是大家都知道,他的前世是飞蓬将军,法力高强,天界无人能敌,只有魔界至尊重楼可以与他一较高下,当他们来到天庭的时候,玉帝施法,让景天直接切换成飞蓬将军,于是他就有了飞蓬将军的记忆和法力,与重楼又一次大战。su就是这样一个神奇的命令。

高通平台上,su的相关代码位于: LINUX/android/system/extras/su/su.c中

Android开发中,偶有会遇到对一些定制设备的开发,一般这种设备都会有root权限,开发中也会用到root权限去做一些操作。

比如安装操作,普通的Android手机安装apk时都会跳出安装的界面,但用到root权限时,这个可以跳过,操作如下:

1
2
3
Process process = Runtime.getRuntime().exec("su");
OutputStream out = process.getOutputStream();
out.write((("pm install -r " + path) + "\n").getBytes());

这里用到Process去获取su权限,然后执行adb的安装指令。要注意的是这些操作需要再try-catch代码块下。

另外之前在网上看到过一个方法去执行命令行:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public static void execShell(String cmd){
  try {
    Process p=Runtime.getRuntime().exec(new String[]{"su","-c",cmd});
    BufferedReader br=new BufferedReader(new InputStreamReader(p.getInputStream()));
    String readLine=br.readLine();
    while(readLine!=null){
      System.out.println(readLine);
      readLine=br.readLine();
    }
    if(br!=null){
      br.close();
    }
    p.destroy();
    p=null;
  } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
  }
}

这里通过参数传入命令行,在方法体中执行。至于具体的命令行,则是需要的时候去找对应的命令就好了。


展开阅读全文

没有更多推荐了,返回首页