一例特殊的照片同步异常处理

缘起

最近使用的照片同步软件一直提示错误,报文件无法读取的问题。

经过详细的分析测试,发现是手机上通过adb push到照片文件夹的文件夹存在中文,而在windows下由于gbk和Android系统编码的问题,在Android系统层面无法删除文件(在文件管理器里也看不到),而软件扫描到后无法读取(这里很坑由于在文件管理器看不到,不好分析,还是我从系统相册中发现有相关空白照片才发现的)。

解决方法

试了网上说的使用linux命令行、通过inode删除,都无法删除,最后网上有段分析(引用自:https://www.v2ex.com/t/922854):

是安卓 fuse 的 bug ,管你用什么(java 层调用,c 层系统调用都没有),最后都需要经过 fuse ,除非 root 后直接进 /data/media/0 下面直接删实际文件。app 自身目录没经过 fuse ,可以删除。

这样看来是Android系统的bug,sd卡下的操作都经过了fuse,而fuse没法正确处理字符乱码的文件。

而解决的方法呢,在vivo手机上处理如下:

由于乱码文件在系统内也是无法读取内容的,在vivo手机的相册中,能够显示这个照片(能够索引到这个文件),但是由于无法读取到文件(文件路径乱码导致读取不到),会在相册内显示一张空白照片。

经过测试,将这张空白照片删除后,照片同步软件就可以了,看起来应该是通过系统的media相关接口进行操作的,在相册中删除后,对应的文件不存在了

在照片同步时就不会处理对应的media文件,从而解决问题。

总结

很难想象,在最新的android13系统中,这个问题依然没有得到解决,看起来是个非常明显的文件系统bug才对。。。

参考文档

https://www.v2ex.com/t/922854

https://www.v2ex.com/t/841866


发表评论

必填

选填

选填

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。