如何阻止流氓软件在 SD 卡根目录到处拉屎
前言
相信很多用安卓的同学都会在 SD 卡根目录底下发现一大堆乱七八糟的文件和文件夹,删掉嘛,过一会又有程序给你弄出一堆文件。这就很烦人了。有人会用 DIR 去阻止这些软件,这个程序对大多数流氓都有用,但是对于某些流氓中的流氓就显得力不从心了,如果你的手机没有 root,那么这个程序也许是你最好的选择。
方法
首先你需要在 root 过的手机上安装 KernelAdiutor 或类似的软件来模拟 init.d 去开机自动执行等会要用到的脚本。
打开 KernelAdiutor,允许获取 root 权限,然后从左边划出导航栏,翻到底下找到并点击 Tools → Init.d,接着点击加号新建一个 init.d 脚本,命名可以随意,比如我命名 91sdcard
。然后编辑脚本内容并保存。
一般情况下你的内置存储都会位于 /data/media/0
下面,如有不同请自行更改(这个文件夹会被映射到其他的地方,详见下文)。
到目前为止这个脚本还没被运行,这时候你就可以去根目录底下打扫一番了。打扫完毕后,运行刚刚新建的那个脚本。这样内置存储根目录就不会有新的文件(夹)生成了。
原理
由于安卓 sdcardfs 的限制,SD 卡(也就是内部存储)中的任何文件都无法更改权限,即使是 root 用户也不行。但 SD 卡是模拟出来的分区,这样就可以满足多个用户拥有不同存储空间的需求。我们所有用户的 SD 卡原始目录在 /data/media
下,里面的各个文件夹对应了这个系统中的每个用户的 SD 卡,一般来说机主用户的文件夹名称为 0
,这就是上文为什么这个脚本中的路径是 /data/media/0
了。因为是原始目录,所以更改权限不受 sdcardfs 的限制,可以直接按照 ext 分区的权限更改方法。
这样我们还可以禁止任意目录下的文件操作,比如我想禁止在 SD 卡下面的 tbs 目录写入文件,那我们就可以直接更改 /data/media/0/tbs
的权限:
这样 tbs 目录就不能读写了(打开目录也是读取的一种)。其中那一串数字的详细意思可以参照这篇文章。
由于重启以后 /data/media/0
的权限会被更改回去,所以我们需要在开机时自动执行一次更改权限的命令,所以我使用了 init.d。
而大部分安卓系统都不支持 init.d,所以我们安装了 KernelAdiutor 来模拟 init.d 功能。
妈妈再也不用担心我的 SD 卡根目录到处是屎了。(# 滑稽)