我也来说说存储权限

2018-01-07 12:59:52 +08:00
 s82kd92l
  1. 相对于其他读取联系人 /短信 /电话权限,存储权限并不敏感。这些 app 不会把非常重要的资料放到公共存储区域。换个角度看,用户随便删除也不会造成太大麻烦。

  2. 的确是很多 sdk 要求存储权限,连 react-native 都不免俗。参加 https://github.com/facebook/react-native/issues/5886,根据里面的描述,即使 app 开发者在 manifest 中手动把权限去掉,gradle 也会自动加入。

  3. 限制难度更大。其他权限只要在 java 和 ipc 层就能拦截,文件系统权限需要内核 /命名空间等技术。纵观所有主流桌面系统,有哪个做到隔离每个运行进程的文件系统的? Windows/OSX 上面各种权限滥用的程度要比 mobile 严重得多,随便在文件系统乱拉屎更是司空见惯,也没见大家抱怨什么。( Linux 上非开源的二进制程序没人敢随便运行,只能放到 chroot/docker 里面)

  4. 只要可开关的权限,一定会有 app 耍流氓,但仅限部分有资格刷大牌的流氓。相反如果 android 像 ios 一样一刀切,用户连文件系统都看不到,用户也不见得喜欢。(这是我不喜欢 iphone 的最大原因)

普通用户能做的就是眼不见为净,如果空间实在不够用,推荐大家用这个: https://f-droid.org/en/packages/com.google.android.diskusage

@rikka 感觉如果要做到重定向,最佳入口是在 app_process fork 出进程之前,和 supersu 做 mount namespace isolation 类似。另一个入口是 fuse/sdcardfs

11083 次点击
所在节点    Android
23 条回复
s82kd92l
2018-01-09 14:47:00 +08:00
@pie @0x23333333 @est 这两天查了下源代码,发现 android 无论是 appops 还是本身的动态存储权限,都是通过 namespace 来实现的:
https://android.googlesource.com/platform/frameworks/base/+/master/core/jni/com_android_internal_os_Zygote.cpp#336
https://android.googlesource.com/platform/frameworks/base/+/master/services/core/java/com/android/server/AppOpsService.java#320
https://source.android.com/devices/storage/#runtime_permissions

要动手脚肯定是在 namespace 上容易些,hook 到 open 开销非常大,不仅仅是 sdcard 上的文件受影响,而且是打开其他包括 system/data 上的文件也会被这个 hook 降低速度.
est
2018-01-09 15:51:11 +08:00
@s82kd92l 思路不错。一个 app 挂一个 volumn

换我就直接给阿里系的全部挂 tmpfs。但是内存不够用唉 ╮(╯▽╰)╭
s82kd92l
2018-01-16 20:09:42 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

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

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX