因为开发者不遵守规范。Android 本身提供了 /data/data/<包名> 这样的内部目录和 /sdcard/Android/data/<包名> 这样的外部目录用于存储 APP 运行时的关键数据,为什么开发者还要在 SD 卡或模拟 SD 卡根目录建一个又一个文件夹强奸用户视觉,我想不明白。
而且 API 方面也是获得系统目录要比获得 SD 卡根目录再逐层嵌套方便得多啊。就比如下面这个例子(只是举例说明,没有黑腾讯的意思)
// 获得 /sdcard/Android/data/com.tencent.mobileqq/files/head 目录的字符串 String path = getExternalFilesDir("head").getAbsolutePath();
怎么也比
// 获得 /sdcard/tencent/MobileQQ/head 目录的字符串 String path = Environment.getExternalStorageDirectory().getAbsolutePath() + "/tencent/MobileQQ/head";
要简洁得多啊,为什么开发者要费力不讨好,是为了存在感吗?腾讯系的我也就认了,好歹全部都放在 tencent 里面。阿里系的应用则是变本加厉,.com.taobao.dp, .DataStorage, .SystemConfig, .UTSystemConfig, alipay, com.eg.android.AlipayGphone。这么多文件夹全部塞到我的 SD 卡根目录,存在感十足好么。当然,阿里系应用你们的确是找足存在感了,我相当重视你们,不惜在 SD 卡根目录下建立同名空文件也要阻止你们创建这些垃圾。
顺便也解释一下我屏蔽掉的其他几个文件夹:
.com.taobao.dp、.DataStorage、.SystemConfig、.transportext、.UTSystemConfig:全都是阿里系应用产生的毫无意义的东西。
.hjpushlog:沪江小 D 词典的日志文件。
.qmt、qmt:QQ 同步助手产生的文件,貌似是记录 UUID,用于给我推送定向广告。
.um:友盟广告 SDK 产生的 UUID 文件,用于给我推送定向广告。
BaiduMapSDK:百度地图 SDK 产生的垃圾。TencentMapSDK 同理,是腾讯地图 SDK 的。【2019-9-10 更新:屏蔽 TencentMapSDK 后,微信小程序(比如青桔单车)里的地图都显示不出来了,请谨慎屏蔽。BaiduMapSDK 的话,新版百度地图 SDK 已经默认将缓存文件放到 /sdcard/Android/data/<包名>/files/BaiduMapSDKNew 里去了,所以只有在用旧版 SDK 的应用会受到影响。也请谨慎屏蔽。就这一点来说,腾讯应该向百度学习!】
Catfish:QQ、TIM 都会产生这玩意。
hrslog、log:手机系统产生的日志文件。我已经退出了用户体验计划,这些日志文件除了占空间以外毫无用处。
mfcache、msc:QQ 产生的东西。
tbs、tbslog:微信产生的毫无卵用的日志文件。而且动辄几十兆几百兆大小。
建立以上名字的空文件,阻止 APP 创建它们的同名文件夹不会对手机造成任何影响,亲测。
我最痛恨的就是 APP 在我手机里存储各种日志文件。在这日志文件里,我的一举一动都被记录了下来,毫无隐私。我手机又不是服务器,我对日志不感兴趣。收集 bug 什么的完全不能成为理由,因为你收集 bug 的时候可以等日志上传完毕后就立刻删除,而不应该继续这样一直霸占着我手机空间。我可不想被别有用心的人盯上。
android是有标准的,比如缓存,本地数据放哪里
可惜很多人不吃这一套,喜欢直接根目录,刷存在感