SSHelper访问外部SD卡权限问题解决方法

9次阅读
没有评论

解决SSHelper无法访问外部SD卡问题的方案

介绍

最近有网友发现,在Android设备使用SSHelper(SSH客户端)工具时遇到了权限拒绝的问题。网友尝试在micro SD卡上的 /storage/sdcard1 文件夹下创建目录,但受到了“Permission denied”的提示。但在手机内部存储器中的/data/data/文件夹下进行同样的操作则顺利完成。

以下是遇到问题和解决方案的具体情况梳理:

问题描述

  • 在外部SD卡上 /storage/sdcard1 进行如下的命令都失败:

    • mkdir Test
      mkdir failed for Test, Permission denied
  • 在内部存储中却没有这个问题:

    • mkdir Test 成功执行并删除文件夹。

Android 5.1.1 应用权限信息如下所示:
– 修改或删除SD卡内容,读取SD卡上的内容。

Android系统和vfat格式的支持问题

  1. 虽然在 Android 4.2.2 上也遇到过类似的问题,不过情况有所不同。这一差异可能源于 Android 系统版本的变更与对 Vfat 格式支持的变化。
  2. vfat 文件系统不是为处理权限而设计的,这种限制是导致问题的关键。这确实是一个比较棘手的问题。
  3. 为什么不用 ext2 卷呢 ? 尽管 ext2 等更多文件系统的支持会在今后版本中出现,但在当前 Android 生态下,vfat 是兼容性更好的选择。

解决方案如下:
临时解决方案:
– 手动将SD卡拉出设备,在 PC 或其他支持 vfat 文件系统的系统上进行写入操作,然后重新插入设备。
此方法虽然繁琐但可以完成任务。不过这种方法会增加携带 SD 卡的不便,并非常使用的办法。

  • 永久性解决方案(需要 root 权限):
  • 需要修改 Android 系统的 platform.xml 文件来添加必要的写入权限以便SSHelper能够访问外部SD卡。
  • 请编辑以下部分,添加 <group gid="media_rw" />:
    xml
    <permission name="android.permission.READ_EXTERNAL_STORAGE">
    <group gid="sdcard_r" />
    <group gid="media_rw" />
    </permission>
    <permission name="android.permission.WRITE_EXTERNAL_STORAGE">
    <group gid="sdcard_r" />
    <group gid="sdcard_rw" />
    <group gid="media_rw"/>
    </permission>
    <permission name="android.permission.ACCESS_ALL_EXTERNAL_STORAGE">
    <group gid="sdcard_r" />
    <group gid="sdcard_rw" />
    <group gid="sdcard_all" />
    <group gid="media_rw" />
    </permission>
  • 修改完成后,重启设备以确保权限变更生效。

  • 警告: 系统文件的任何修改都有可能在系统更新时被清除。因此,在执行这些操作之前请务必做好备份,并且进行充分的测试确认其效果。

教训总结

尽管这个问题的确存在一定的复杂性,但通过系统的权限调整和必要的技术手段我们可以绕过 vfat 文件系统的限制完成任务。而对于大多数用户来说,则推荐使用临时文件存储或设备间的 USB 传输作为更简便的方法。

希望本文能帮助大家更好的理解和应对 Android 系统下的外部存储访问难题。

正文完