使用adb在电脑和手机间传文件

使用adb pull命令从手机拷贝文件到电脑过程中的报错及解决。

基础命令

adb pull source(mobilepath) dest(localpath) 从手机拷贝文件到电脑;

adb push source(localpath) dest(mobilepath) 从电脑拷贝文件到手机;

报错

在一台已经root了的手机上拷贝文件到电脑,由于没有权限导致的pull文件报错有以下2种情况——

adb: error: remote object ‘/data/data/com.xxx.xxx/files/conf.ini’ does not exist
adb: error: failed to copy ‘/data/data/xxx’ to ‘D:\file’: remote Permission denied

错误原因

adb pull/push命令没有root权限,问题就是adb shell进入是$,并没有直接进入#。所以即使在adb shell命令的root权限下利用chmod 777命令提高文件权限,使用adb pull命令依然会由于权限不足而报错。

解决

解决1

直接用adb pull没权限,将要pull的文件拷贝到/data/local/tmp目录后再利用adb pull拷贝到电脑上。

adb shell 
su 
cp src_path /data/local/tmp/xxx
adb pull /data/local/tmp/xxx dst_path    //如果此时使用pull命令依然提示权限不够,则进行如下操作

adb shell 
su 
chmod 777 /data/local/tmp/xxx
adb pull /data/local/tmp/xxx dst_path
解决2

讲真,这个真的很玄学,很多网上的解答都说改变权限就可以了,但是我昨天晚上在一台手机上各种改变权限,最后成功了,还以为是要把要拷贝的文件的各级目录都赋予读写权限才行,结果今早重新用另外一台手机拷贝文件,将每一级都赋予了相关权限,但依然没法成功,真的很迷~~

另外,如果手机已经取得了root权限,安装一个文件管理器Root Explorer,就可以直接在里面改变文件的权限和所有者了,比起adb命令要方便一些。

解决3

解决1比较适用的场景是只需要拷贝单个文件的情况,而如果需要拷贝某个文件夹下的多个文件,则会比较麻烦,下面介绍这种情况的解决方法。

  1. 首先利用下述命令将目的文件夹拷贝到目录data/local/tmp下。

adb shell
su
cp -r data/data/caom.xxx.xxx/* data/local/tmp/

  1. 然后如解决2中所述,利用文件管理器Root Explorer改变拷贝到目录data/local/tmp下的文件夹的权限(对所有用户组都具有读写权限)和所有者(改为1000-system)。
  2. 此时再用adb pull命令即可成功拷贝。

参考文献

adb: error: remote object ‘/data/data/com.me.myproject’ does not exist
在Android中使用adb命令时关于权限方面的一些总结
adb pull和adb push失败问题解决方法
adb pull命令复制android数据库文件.db到电脑
怎样修改安卓手机文件权限、所有者和用户组
手机已经root了,可以用su命令,但是adb push/pull无权限