Android Device Monitor 权限笔记

android studio 下载 | 2018-07-29 11:30

之前的『』提到,目前我主要使用 React Native 进行项目开发,而最近因为项目变动需要,手机App的开发需要暂缓,而把主要方向放在广告机的开发上。

广告机的系统是Android的,所以不用兼顾iOS端,于是乎,十分开心的回归了原生的开发。

但是事情总是不会像想象中的那样顺利,这个系统是已经基本开发完成的了,是公司之前交给外包团队做的,于是遗留了一大堆的Bug,所以我要阅读源码并修改项目。

不得不说这个外包团队的代码风格真的差的一逼,看他们的代码根本停不下爆粗的冲动,代码晦涩难懂,而且使用了一些比较老旧的Google已经弃用的东西,还不写文档!没办法,只能边看边学了。

于是又拿出了之前在『』文末提到的《第一行代码——Android》第2版,准备进行深度学习。

这个笔记的背景是阅读到数据持久化方法之文件存储的时候,代码通过Context类中提供的openFileInput()和openFileOutput()方法以及Java的各种流来进行读写操作。

然后系统会在「/data/data/<package name>/files/」目录下创建一个名为「data」的文件,我们可以通过『Android Studio』中的『Android Device Monitor』去查看。

那么问题来了,与书上的介绍不同,我所使用的『Android Studio』并没有『Android Device Monitor』,难道是我打开的方式不对?

我的「Tools」里根本就没有『Android Device Monitor』啊!

后来从Google官方文档得知,自『Android Studio』Version 3.0 开始就已弃用了『Android Device Monitor』。

However, most components of the Android Device Monitor are deprecated in favor of updated tools available in Android Studio 3.0 and higher.

但是,大多数 Android Device Monitor 组件已弃用,以支持『Android Studio』Version 3.0 和更高版本中提供的更新工具。

那没有『Android Device Monitor』,要怎么继续下一步呢?

其实进入 Android SDK 的目录看一下可以发现,即使弃用,但SDK里面还是提供了『Android Device Monitor』。

可以在命令行中进入「/AndroidSDK/tools/」目录,然后输入monitor即可打开。

也可以直接进入到该目录双击文件「monitor.bat」打开。

本以为打开『Android Device Monitor』就可以继续后面的学习了,这未免也太顺利?

按照步骤,我需要进入「File Explorer」标签页到「/data/data/<package name>/files/」目录下去寻找这个名为「data」的文件,但是却发现「/data/」目录根本打不开。

又进入了知识的盲区,赶紧去补了补课。

可以看到,「/data」文件夹的Permissions是「drwxrwx--x」,这是什么意思?相信学过Linux的同学就非常清楚了。因为Android的底层是Linux,所以每个文件夹都是有权限控制的。

具体是什么意思?

这一个字符串一共有10个字符,第一个字符表示的是文件类型。「d」表示是文件夹,「l」表示连接文件,「-」表示文件。

后面9个字符又可以分为三个元组,每3个字符为一个元组。第一个组表示文件所有者(user)的权限,第二个组表示同组用户(group)的权限,第三个组表示所有其他用户(other)的权限。

元组内字符的顺序是「rwx」。

r :read,可读w :write,可写x :execute,可执行- :无该权限

所以,「drwxrwx--x」的意思是,没有「r」和「w」,说明「/data」文件夹对其他人来说是不可读不可写的。因此我们则需要修改其对应的权限。

需要用到的是 Android SDK 中的adb。

adb在「/AndroidSDK/platform-tools/」目录下,但是我们不能够通过双击来运行它。

而是需要将这个目录添加到环境变量,我在之前的『』中已经添加了这一环境变量,这里就可直接执行下一步。

接着直接在CMD中输入命令:

然后按照下图命令继续操作。

解释一下这几个命令:

adb shell :打开 adb 外壳程序su :切换为超级管理员,即获取 root 权限,只有 root 权限才能修改文件的访问权限chmod <权限> <文件夹> :为文件夹设置权限

还需要提的是,「#」是超级管理员的意思,也就是说可以访问模拟器中的一切数据,而「$」则表示是普通管理员,输入su命令的作用就是切换成超级管理员。

命令的前面两项好理解,关于文件夹权限,这一堆「chmod 777」又是什么意思?

是把对应的文件或文件夹的访问权限的后9位设置成「rwxrwxrwx」,「777」就三个二进制「111」, 合起来就是「1」(9个1),即相当于把后9位访问权限都置1,于是就成了「rwxrwxrwx」,即所有用户都具有该文件的全部访问权限。

按道理到这里就已经获取了权限可以访问对应的文件了,但事情并没有我想象中的那么顺利,文件夹依旧打不开…

我就纳闷了…

不知怎么的突然有个想法,在之前的『』中可以通过root然后在『RE文件管理器』中查看本地数据库,那么我可不可以直接root呢,虽然上面的su也是获取root权限。

抱着试一试的心态,我在CMD中输入了:

结果,文件夹就真的畅通无阻的被我打开了…

事实上,使用 adb root 并没有修改其「rwx」权限,它只是获取了最高级的操作权,可以看到在执行了 adb root 后,adb shell 中的「$」就已经变成「#」了,无需执行su。

如果从一开始就执行 adb root 的话,adb shell 中的相关操作则无需执行,也可以查看到「/data/」目录下的文件。

其他关于『Android Device Monitor』基本可以通过「Reset Perspective」操作或重启解决。