在论坛里常常碰到求助的,说访问限制的密码忘记了,或者是锁屏密码忘记了,导致有些程序(如短信,通讯录等重要程序)打不开,影响正常使用。又嫌麻烦,不愿意刷机。是不是就没有办法解决了呢?答案也是否定的。别忘了,ADB还有个shell命令呢。(本教程针对Miui系统,以DEFY为例,机子要求已经root,其他机型方法类似,但个别地方有细微变动,恕不细说)
首先介绍下什么是shell。
Linux系统的shell作为操作系统的外壳,为用户提供使用操作系统的接口。它是命令语言、命令解释程序及程序设计语言的统称。
shell是用户和Linux内核之间的接口程序,如果把Linux内核想象成一个球体的中心,shell就是围绕内核的外层。当从shell或其他程序向Linux传递命令时,内核会做出相应的反应。
shell是一个命令语言解释器,它拥有自己内建的shell命令集,shell也能被系统中其他应用程序所调用。用户在提示符下输入的命令都由shell先解释然后传给Linux核心。
有一些命令,比如改变工作目录命令cd,是包含在shell内部的。还有一些命令,例如拷贝命令cp和移动命令rm,是存在于文件系统中某个目录下的单独的程序。对用户而言,不必关心一个命令是建立在shell内部还是一个单独的程序。
而本节课要说的内容,恰好跟adb shell命令有关。首先我们要知道的是,MIUI的访问限制的密码是图形密码,它储存在根目录的/data/system路径下,名字为access_control.key如下图
<ignore_js_op> <ignore_js_op>
当你忘记密码的时候,首先想到的是进入RE管理器删除该文件,但是假如RE管理也被访问限制了呢?此时ADB命令就又大显神威了。
将手机链接至电脑,熟悉的进入ADB命令行界面,只需输入
- adb shell rm /data/system/access_control.key
<ignore_js_op>
密码什么的顿时被搞定,重新去试试被限制的程序,可以打开了吧?再去看看访问限制的菜单,发现已经自动停用了~!
<ignore_js_op>
同理,锁屏密码也是位于该目录下
<ignore_js_op> <ignore_js_op> <ignore_js_op>
假如是在屏幕未锁定的情况下忘记了锁屏的密码,赶紧在屏幕锁住之前到RE管理器的/data/system/下找到gesture.key(图形密码)或者password.key(数字及密码),删除之。假如是一不小心在锁屏的状态下忘记了密码,可以将手机连接至电脑,进入ADB执行
- adb shell rm /data/system/gesture.key
<ignore_js_op>
可以删除锁屏图形密码;
执行
- adb shell rm /data/system/password.key
<ignore_js_op>
可以删除锁屏数字密码两种加密方式
开屏,是不是不需要输入密码了呢?再看设置菜单里,密码已经被重置为无。
<ignore_js_op>
我觉得这是ADB命令里最有用的一个地方了。
当然,以上都是建立在USB调试模式开启的状况下。如果你悲剧的没有开启,如下图所示
<ignore_js_op>
那么可以通过其他途径删除密码。
重启手机,亮蓝灯的时候按音量下进入【bootmenu】菜单,选择【Tools】
将手机连接至电脑,然后选择【ADB Daemon】开启adb<ignore_js_op>
可以发现手机已经链接,此时就可以通过adb shell命令来删除密码了
按照课程一给出的方法,进入ADB环境,
依次输入
- adb shell
- mount /data/
- rm /data/system/access_control.key
- reboot
结果如图
<ignore_js_op>
当然,以上是进入shell里完成的,也可以逐条执行,效果是一样的
- adb shell mount /data/
- adb shell rm /data/system/access_control.key
- adb reboot
同理锁屏密码(图形、数字字母密码)也可以通过此方法删除,只不过是将access_control.key换成gesture.key或者password.key罢了。小米机型需要注意的是,在使用shell命令前,请先输入adb root ,取得root权限
当然删除密码的途径不只此一种,如果你手机端安装的有终端模拟器,那就更方便了,无论你是否开启了调试模式,只要赋予终端模拟器root权限,然后输入
- su
- rm /data/system/access_control.key