您现在的位置是:首页 > 文章详情

Android Device Monitor--File Explorer 中的/data/data/..无法访问的问题

日期:2018-04-13点击:613

本文参考自CSDN文档《Android Device Monitor 文件管理的常见问题


img_1d2221a18a786da9d82cf79180a9cc0a.png


最近在看《第一行代码》(第二版)中关于数据存储方案的介绍。数据的状态分为两种:瞬时状态和持久状态,一般保存在内存中的数据随着活动的关闭,数据也就销毁了,如果我们想保存这些数据,该怎么办呢?书中介绍了三种实现数据持久化的方法,分别是:文件存储,SharedPreference 存储以及数据库存储。

在学习第一种数据持久化方法文件存储的时候,我们通过 Context 类中的 openFileOutput() 方法创建一个指定了保存路径的 FileOutputStream 对象 out,然后用这个 out 对象去创建一个 OutputStreamWriter 对象,之后再用这个 OutputStreamWriter 对象创建一个 BufferedWriter 对象 writer,我们就是通过这个 writer 的 write() 方法向文件输出流写入我们想要保存的数据的。文件写入数据之后默认保存在 /data/data/(package name)/files 目录下。我们可以通过 Android Studio 中的 Android Device Monitor 去查看,Android Device Monitor 的打开方法如下所示。

img_86159e88637c830f9e5ac0771988342a.png
打开 Android Device Monitor


openFileOutput() 方法生成的文件存放在一个默认路径,即 /data/data/(package name)/files 下,

于是,下一步当然是打开这个路径了,找到 data,点击,没反应,再点击,还是没反应。又遇到问题了,我无法访问 data 目录,通过 Google 搜索可以知道了 File Explorer 中的每个文件和文件夹都是有访问权限的,如下图红框中标识的就是 data 文件夹的访问权限。

img_02a2a0b1bdf43669baa4ffe5b55b4da5.png

访问权限是 drwxrwx--x,这玩意是什么意思呢?我相信,学过 Linux 的同学肯定一眼就知道这是什么意思。这一个字符串一共有 10 个字符,第一个字符表示是文件夹还是目录,如果第 1 个字符是 d,则表示是文件夹。后面 9 个字符可以分为三组,第一组 rwx 表示所有者(user)对文件的访问权限,r 表示可读(read),w 表示可写(write),x 表示可被执行,- 表示没有该权限;第二组 rwx 表示组群(group)对文件的访问权限;第三组 --x 表示其他人(other)对文件的访问权限,可以看到,没有 r 和 w,说明 data 对其他人来说是不可读不可写的,怪不得我们不能打开它呢,那怎么办呢?于是我又网上搜啊搜,发现可以通过一定的方法修改文件的访问权限的,对,这个方法就是 adb shell。

adb shell 是 Android SDK 中的一个工具,你可以在你的 Android SDK 目录下的 platform-tools 找到它,下图就是我电脑上的该目录:

img_87d0a6fe0e6193a9c32a834d0da2b6e2.png
adb 所在目录


我们需要将这个目录添加到环境变量,为的是后面在命令行直接调用 adb 中的命令。比如在此我将  D:\AndroidSDK\platform-tools  添加到环境变量(具体怎么添加可以看百度教程——如何添加环境变量)。随后可以根据参考文档进行操作便可以了。


这里主要说一下几个问题:

1.如图,adb版本不匹配:

img_124f8092ce48dbeb8464d61e58beeb2c.png

从报错的原因来看应该是版本不一致导致的,大概的意思是说你现在的adb版本是39,但是你client端的却是36.

总是就是版本不对了不能好好玩耍了,于是我凭借一句关键词“adb工具包官方下载”在百度上翻越山河大海(唉查阅了好多论文和博客,花费了太多时间了,沧桑啊。。。)意识到我们的adb应该要换个版本了!!!

皇天不负有心人终于让我在联想中国的论坛中找到了adb工具包最新2017Google官方版下载地址,这里感谢联想大大了~


img_409a9c6bcb65888ed52de1eda81211e5.png

下载之后,选中压缩包中的如图的四个文件,覆盖在自己本地的platf-tools目录上对应的文件,在此运行,就没毛病了。。。

img_819a6f4e7dc7141b42358108d76b8fa0.png


img_7cd39ffcec5bcc4bbe40398c75380090.png
没毛病了,感动。。。

2.关于访问/data/data/..的权限问题,其实如果没有特定的必要的话,可以通过genymotion平台,使用版本在Android6.0以下的手机,即可规避各种权限问题(adb shell直接为root,同时也可直接访问/data/data/.. 路径!!!无须前面各种繁琐的操作了):

可见CSDN某参考文档

一开始采用的Android Studio安卓模拟器的版本是根据所学习的教程推荐的Android 7.0。

但是,Android 7.0的模拟器是没有root权限的!

所以只需要重新安装一个非Android 7.0版本的模拟器(可以通过genymotion平台,使用版本在Android6.0以下的手机),如Android 6.0,或者连接一台获得了root权限的安卓设备

运行后会发现,当进入adb shell后,命令提示符里前缀就已经变成了:

root@generic_x86:/ #

带有root权限的adb shell

那也就不需要su命令了,可以直接访问所有的文件,问题就解决了。


img_66244af4b13eb874940f2ccb1202349e.png

需要注意的是:

我们要

先打开Android Device Monitor,随后再打开Genymotion的模拟器

那样模拟器的相关信息才会在Android Device Monitor 中显示出来,不然还是会出现各种奇奇怪怪的错误的!

原文链接:https://yq.aliyun.com/articles/686622
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章