随着智能手机的快速发展,其强大的功能让越来越多的人用得不亦乐乎,大量的APP不断地进入,各式各样的功能满足各种种样的人类需求,当你面对自己手机上大量的app应用,在尽情享受的同时有没有过烦恼呢?反正我是有烦恼的,至少当我刚买个Android新手机时,里面就已经装有好几十个APP时,我就有点头大了,因为这几十个APP中,大部分是我用不到或不想用的APP,更恼火的是:这些APP还不能卸载,这也太霸王了吧!如果要删除这些不想要的系统软件我们就要获取到手机的Root权限(也就是刷机)才行,这对我们开发人员而言就不是件难事,现在也有很多获取手机ROOT权限的APP应用,只要装在手机上就可能刷机成功,还是方便的。这两天学习Android手机Root相关视屏,正好做点笔记!这篇文章http://blog.csdn.net/chaihuasong/article/details/8463212/有详细介绍ROOT的原理 和方法,值得学习。
Root权限是Android系统中拥有最高权限,可以操作手机中绝大部分功能 ,能实现很多我们非ROOT权限所不能实现 的功能 。我们之所以要ROOT也是基于获取好手机操作的更多权限,那我们获取到Root权限后,可以做做么呢?
1、可以将程序应用安装在SD卡上及删除原厂系统自带预装软件,节省存储空间。
2、可以管理开机启动项,修改开机动画,禁用不需要后台运行的程序,手机更省电。
3、可以备份手机重要资料,一旦不小心数据丢失还可以在备份中还原。
4、可以修改手机系统,也就是root后可以给安卓手机刷机,体验不同安卓系统的乐趣。
5、可以刷入第三方的recovery,对手机进行刷机、备份等操作。
6、可以修改hosts,改变手机的网络,正常访问谷歌服务,汉化手机系统等。
7、对我们开发者而言更方便:可以直接在手机上查看正在运行APK的文件夹及数据库等。
备注:以上几点主要来自百度,一下子真想不到有这么多用处。
我们都知道Android系统底层是Linux系统,Android中的Root权限等同于Windows中的administrator。在我们的Linux系统中,从普通用户切换到Root用户用到的是su命令。
其实Android系统本质就是Linux,为什么呢?
操作系统的基本组成 :系统内核+文件系统
Linux系统:Linux内核+文件系统(ext3/4)
Android系统:Linux内核+文件系统(ext3/4)同Linux系统是一样的,本质就是Linux系统 。
讲了这么多,那如何来获取Root权限呢?除了上面提到的用现有的Root工具或软件外,我们通常要以下几个步骤:
1,一个合适的Recovery:在bootloader模式下复制整个的文件系统,在Recovery模式下将文件复制到Android设备的指定文件,
2,改造su命令:Android系统自带的su命令只允许root用户及shell用户使用,要进行改造
3,制做Recovery刷机文件:zip格式的压缩文件主要由待复制和Edify语言编写的脚本组成
4,执行su命令提取ROOT权限:刷机后,Android系统直接拥有Root权限,我们就成为了超级用户啦。
5,让Rom本身拥有Root权限 。
下面就开始我们的刷机之旅:
首先我们刷一个很酷的Recovery:
进入http://www.clockworkmod.com/rommanager,如图:
根据自己手机选择一个对应的Recovery包,下载到本地。什么是Recovery?我也找了好久的资料,感觉http://www.3lian.com/edu/2012/04-11/25212.html还行,就是页面广告太多了。
刷机中要用到的命令语句 :
1.fastboot flash boot boot.img,这个要保证在boot.img存在的情况下才可以执行
2.千万不要执行fastboot erase bootloader命令,一旦执行,手机秒变砖头。
上面提到了Edify语言:这是Android系统来运行updater-scripts的Edify语言,大部分的Edify命名都是函数,当调用这些函数结束的时候,会返回数据给脚本。我们在进行刷机操作中要用到的函数有:
ui_print(msg1,...,msgN):用于在Recovery界面输出字符串。其中msg1,...,msgN表示N个参数,至少要指定一个参数,如果指定多个参数,则会把参数拼接输出。
run_program(prog,arg1,...argN):执行程序,prog表示要执行的程序文件,需要写完整的文件路径。arg1等参数表示执行程序 的参数,其它prog是必有有的,如run_program("/sbin/busybox/","mount","/system");
delete(file1,...fileN):删除一个或多个文件,至少要指定一个文件。
package_extract_dir(package_path,destination_path):提取刷机包中package_path指定目录所有文件到destination_path指定目录。package_path指刷机包中目录,destination_path指目标路径
set_perm(uid,gid,mode,file1,...,fileN):用于设置一个或多个文件的权限,uid指用户ID,gid表示用户组ID,如果要想文件的用户和用户组都有root权限,则都要设置为0,mode表示设置的权限
mount(fs_type,partition_type,location,mount_point):挂载分区如:mount("ext4","EMMC","/dev/block/platform/s3c-sdhci.0/by-name/system","/system");
unmount(mount_point):解除文件系统的挂载。
接下来我们编写update_script脚本文件,主要有五步:
1,以读写模式挂载/system
2,删除旧的su文件
3,复制新的su文件
4,修改su文件的权限
5,卸载/system
文件内容:
run_program("/sbin/busybox","mount","-o","rw","/system");
delete("/system/xbin/su");
package_extract_dir("system","/system");
set_perm("0","0","0777","/system/xbin/su");
umount("/system");
分别对应上面的5步。
接着复制su命令到/system/xbin目录:
adb reboot recovery:在bootloader模式下直接进入,可通过音量下下键切换正常地系统,还是recovery模式
最后在Android设备的终端执行su命令提取root权限(在APP中调用su命令)。
记得好乱~~~