时间:2021-10-22 09:09:00 | 栏目:Android代码 | 点击:次
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权限时,这个可以跳过,操作如下:
Process process = Runtime.getRuntime().exec("su"); OutputStream out = process.getOutputStream(); out.write((("pm install -r " + path) + "\n").getBytes());
这里用到Process去获取su权限,然后执行adb的安装指令。要注意的是这些操作需要再try-catch代码块下。
另外之前在网上看到过一个方法去执行命令行:
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(); } }
这里通过参数传入命令行,在方法体中执行。至于具体的命令行,则是需要的时候去找对应的命令就好了。