解决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格式的支持问题
- 虽然在 Android 4.2.2 上也遇到过类似的问题,不过情况有所不同。这一差异可能源于 Android 系统版本的变更与对 Vfat 格式支持的变化。
- vfat 文件系统不是为处理权限而设计的,这种限制是导致问题的关键。这确实是一个比较棘手的问题。
- 为什么不用 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 系统下的外部存储访问难题。
正文完