# 介绍
# “坏应用”滥用存储权限
由于目前的 Android 系统对于存储权限设计过于简单,许多“坏应用”都有滥用存储权限的行为。
要解释清楚这个问题,我们首先需要介绍 Android 系统的存储空间的设计。
Android 系统对于存储空间的设计很简单〔1〕:
/storage/emulated/0
├───Android
│ ├───data/com.example <---- 不需要权限
│ ├───media/com.example <---- 不需要权限
│ └───obb/com.example <---- 不需要权限
├───DCIM
├───Download
├───Pictures
└───...
DCIM
Download
Pictures
等公共文件夹用于保存图片、下载的文件等,需要存储权限,只能被用户主动删除。应用也可根据需求建立自己的文件夹。
Android
中的文件夹用于保存应用自身的数据及缓存等,不需要权限,在清除数据和卸载后被删除。
但是,问题出在存储权限只能选择授予或拒绝。一旦授予,应用就可以读取及写入所有的文件夹。
这被许多“坏应用”及“坏 SDK”滥用。它们会请求存储权限,甚至没有权限就拒绝运行。它们需要保存追踪用户的标识,避免在卸载后被删除。另外,多个这样的应用还可以借此共享标识。这在来自中国大陆等用户隐私意识淡薄的地区的应用中非常常见。
在下面的例子中你可以看到,许多“坏应用”建立一堆奇奇怪怪的文件夹,甚至以“SystemConfig”命名来让用户误以为是系统文件。
滥用存储空间的例子

许多时候用户只能因为需要使用“发送图片”等功能而被迫授予它们存储权限〔2〕。
〔1〕 另外还有 /data/user
可供保存应用自身数据,但与主题无关,因此未作说明
〔2〕 Android 系统提供了用户可以指定授权特定的文件/文件夹的方式,但鲜有应用使用
# 存储空间隔离
为了解决上面这个问题,我们创造了这个应用——存储空间隔离。
用户可以为特定的应用启用隔离,应用将不再可以使用真实的存储空间。
/storage/emulated/0
├───Android/data/com.example
│ └───sdcard <---- 应用可见的存储空间
└───...
此外,应用可以访问哪些文件夹都可以指定。关于具体的使用方式,请阅读后续的文档。
教程→