DDMS File Explorer 中的文件无法访问和导出pull

问题2:File Explorer 中的文件无法访问

还记得刚刚说的吗,openFileOutput() 方法生成的文件存放在一个默认路径,即 /data/data/(package name)/files 下。由于我的包名是 com.knightaoko.filepersistencetest,所以在下文的叙述中,大家看到这个陌生的字符串不要惊讶,实际操作下替换成你自己的包名即可。(这期间还碰到个问题,好像 Android Device Monitor 不能和 Instant Run 同时运行,所以在此需要把 Instant Run 功能关闭,怎么关闭大家自行 Google,很简单的。)于是,下一步当然是打开这个路径了,找到 data,点击,没反应,再点击,还是没反应。又遇到问题了,我无法访问 data 目录,通过 Google 搜索,我知道了 File Explorer 中的每个文件和文件夹都是有访问权限的,如下图红框中标识的就是 data 文件夹的访问权限。


无权访问

访问权限是 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 找到它,下图就是我电脑上的该目录:


adb 所在目录

我们需要将这个目录添加到环境变量,为的是后面在命令行直接调用 adb 中的命令。比如在此我将 D:\AndroidSDK\platform-tools 添加到环境变量(具体怎么添加应该不用手把手教学了吧)后,运行 cmd 命令行,然后输入下面的命令。


通过 adb shell 获取文件访问权限
  • adb shell 是打开 adb 外壳程序。
  • su 是获取 root 权限,只有 root 权限才能修改文件的访问权限。
  • 底下一堆 chmod 777 是把对应的文件或文件夹的访问权限的后 9 位设置成 rwxrwxrwx,777 就三个二进制 111, 喝起来就是 111111111(9 个 1),即相当于把后 9 位访问权限都置 1,于是就成了 rwxrwxrwx,即所有用户都具有该文件的全部访问权限(妈妈再也不用担心我打不开 data 了…)。我们来看看结果:

我这里挑选一条来分析:

adb push <local> <remote>    - copy file/dir to device    

这就是adb push的使用方法了,这个不用我解释,大家都懂吧。

下面介绍如何使用这个命令:

假设你的文件在D盘的根目录下,比如D:\file.txt

进入DOC后,使用命令:adb push D:\file.txt  /system/temp/

意思是将Windows下D盘根目录下的file.txt文件拷贝到小机(手机或者平板)的/system/temp/目录下。

你在运行这条命令时,可能会遇到failed to copy  'D:\file.xtxt' to '/system/temp/' : Read-only file system 的报错信息。

怎么解决呢?很简单,使用下面这条命令:

先退出adb,再remount!!!

adb remount

它的意思是将设备改为可读可写。

  adb remount    - remounts the /system partition on the device read-write

看到remount succeeded后,就可以再次执行:adb push D:\file.txt  /system/temp/  这样就可以成功了,就可以在小机的/system/temp/目录下看到file.txt文件了。

如果你要将小机的文件拷贝到电脑上来,那就执行adb pull命令,这很简单了吧?

修改后的文件访问权限

问题3:File Explorer 中的文件无法 pull(下载)

可以看到这些目录都能访问了,可以在包名目录下看到生成的 data 文件了,下一步我们想把这个文件复制到我们的电脑里,怎么操作呢?选中该文件,点击右上角的 pull 图标即可,如下图所示:


文件下载按钮

点击之后,选好保存路径。结果我们发现文件并没有保存下来,在 Console 窗口还提示了错误:


文件下载出错

意思就是拉取文件失败,因为你无权进行该操作。又是一脸懵逼,怎么办?还能怎么办,继续 Google 呗!这里我找了很久,终于发现了解决方案:adb root 。没错,在命令行输入这条语句,完美解决!(注意是在 windows 下的命令行,而不是 adb shell 里,当然前提是你添加了 adb 的目录到你的环境变量里)


通过 adb root 获取文件下载权限

然后我们再来 pull 一下,卧槽,崩溃了,又发现问题了:Failed to pull selection。


文件下载再次出错

怎么办?OK,继续 Google,在 StackOverflow 里找到了一个高赞的解决方法:


重新选择模拟器(from SO)

什么意思?重新选择一下 Android Device Monitor 左侧面板的设备即可,没错!就是把下图红框中国的玩意儿点一下。


重新选择模拟器

好了,我们再找到刚刚那个要拷贝的文件,pull 一下,卧槽!!成功了,真是踏破铁鞋无觅处,得来全得靠姑姑(谷歌)。


文件下载成功

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许进进

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值