解决挂载mount网络目录到安卓android本地后看不见共享文件的问题

· 1427 words · 3 minute read

如果你把局域网内的共享目录使用mount命令挂载到安卓android系统里后, 比如在android系统里使用es文件浏览器访问挂载好的samba网络共享目录,发现里边什么都没有, 或者使用百度网盘或者迅雷下载时, 以为把文件下载到了samba共享目录里, 可实际上却是下载到了安卓本地存储的sdcard上, 那我估计是没有把外置存储设备的三个挂载视图设置全, 比如 /sdcard/baidupan 这个路径是你想要设置的挂载点, 你并不需要mount /sdcard/baidupan 而是要mount 与之对应的 “/mnt/runtime/挂载视图/emulated/0/baidupan” 这样的三个路径(访问/mnt/runtime必须先root), 所以, 修改下面的代码为你的网络共享目录和你的安卓上的三个挂载目录, 并在adb shell里以root权限输入:

busybox mount -t cifs  -o "username=guest,password=guest,rw,noperm,iocharset=utf8,file_mode=0777,dir_mode=0777,gid=1023,uid=1023" //192.168.1.100/baidupan /mnt/runtime/default/emulated/0/baidupan

busybox mount -t cifs  -o "username=guest,password=guest,rw,noperm,iocharset=utf8,file_mode=0777,dir_mode=0777,gid=1023,uid=1023" //192.168.1.100/baidupan /mnt/runtime/write/emulated/0/baidupan

busybox mount -t cifs  -o "username=guest,password=guest,rw,noperm,iocharset=utf8,file_mode=0777,dir_mode=0777,gid=1023,uid=1023" //192.168.1.100/baidupan /mnt/runtime/read/emulated/0/baidupan

上面三条语句把samba里同一网络共享目录挂载到了三个不同的视图分别是 default , read, 和write. android 6.0及以后的系统都要这么挂载. 上面代码使用的是busybox提供的mount挂载的,

  • 参数-t文件系统类型, cifs表示使用cifs协议访问samba服务器,
    • 可以输入 cat /proc/filesystems | grep cifs 查看设备是否支持 cifs协议
  • 参数-o表示选项列表, 也就是后边用引号引起来的一大串
    • 我设置的匿名访问username和password都是guest,
    • 参数noperm 表示不做权限检查, 不检查访客和挂载点访问权限是否匹配,
    • iocharset设置网络路径名使用utf8字符集
    • file_mode文件权限和dir_mode目录权限设777给全部权限,
    • gid是用户所在组的组id, uid是用户的id, everybody的id是9997, sdcard_rw的id是1015, media_rw的id是1023, 使用id命令可以查看用户的id, 在命令行输入: id media_rw
  • //192.168.1.200/baidupan 是我树莓派的ip和共享目录名baidupan
  • /mnt/runtime/write/emulated/0/baidupan 安卓系统上的挂载点, 以及其他两条挂载路径, 虽然路径很长但是他们是指向同一个挂载点 /sdcard/baidupan

如果你需要从头开始设置往下看 🔗

设置android安卓设备权限 🔗

安卓系统作为挂载点, 需要使用mount命令, 所以必须root, 我的是电视盒是海美迪h7四代, android版本6.0, 已经root, 在supersu里要将默认授权操由询问改为授权, 也就是当adb shell 里需要root权限的时候不需要再去电视那里点确认:

分类挂载命名空间的选项要取消掉, 然后重启(拔电源或者adb里reboot)

adb shell 的设置 🔗

在安卓系统至少要打开usb调试

然后连接你的android设备的ip地址.比如在cmd里输入

adb connect 192.168.1.200
  • 如果报错了5037端口被占用, 那就kill掉占用的进程然后再打开adb试试
    • 查看占用5037端口的进程号: netstat -ano | findstr 5037
    • 查看进程号对应的进程名: tasklist | findstr 进程号
    • 杀掉某进程: kill 进程号

连接上以后输入 , 进入shell

adb shell

此时命令行提示符是$,

输入su变成root用户,

su

挂载 mount 🔗

然后请回到文章开头, 就直接修改文章开头的那三条挂载命令改成你自己的就行了, 不过你的安卓设备一断点重启就又得重新设置挂载

最后 🔗

就算把samba的网络共享目录设置为百度网盘的默认下载路径, 它也会误以为默认下载路径还是在安卓设备上, 但是这不要紧, 比如下载的文件过大的视频文件, 百度盘会提示本地存储容量只有几个G, 让你选择下载清晰版的还是下载原版的, 但是实际开始下载后, 下载的文件会出现在局域网共享目录里, 而不是安卓本地存储sdcard里.