基础概念:
目前主流的Linux,一个目录占用的空间为4096字节。
(注:认为Linux目录不占空间的同学,请自行百度)
分享要点:
-
经过查看Android不同版本源码并测试, 12KB的缓存残留应该是Android4.2的一个 Bug。
-
Android4.2的 应用信息大小(包含 Cache大小)的计算都是存在错误的。
原因分析:
缓存大小计算涉及以下两个文件:
\frameworks\base\cmds\installd\commands.c
\frameworks\base\libs\diskusage\dirsize.c
通过在文件搜索关键字“
calculate_dir_size ”,可以找到关键代码。
Android4.2以前代码逻辑都是正常的
应用cache目录占用的空间不会被计算进应用Cache大小。
而Android4.2后则存在以下问题:
假设一开始缓存大小为cacheSize = 0,
command.c中在计算缓存大小时, 将cache目录大小计算进cacheSize:
cacheSize += 4096,
dirsize.c在计算缓存大小时,将“.” 与“..”两个目录加入计算:cacheSize += 4096 *2。
分析结论:
Android的应用信息中部分目录大小被重复统计。
而最终
cacheSize=4096B*3=12KB。