跟Android源码:获取文件的缓存大小

直接读其他应用的cache文件夹是不现实的。因为应用程序对其他应用程序设置了只能执行的权限:

但是发现系统的Setting中有缓存大小,

系统是怎么获取的呢?下面我们就来分析系统是怎么得到的:

1、首先导入系统上层应用程序Settings,发现系统的Settings布局中有“缓存”字样。我们可以直接在项目中搜索:

2、查询之后,就能看到整个项目含有“缓存”字样的文件。

3、双击进去,找到对应的strings文件,拿到对应的引用,继续在整个项目中搜索:


4、然后就能看见系统缓存信息界面的整个布局了。

5、我们知道缓存信息是在这一行的,双击进去再获取对应显示的控件id:


6、继续在整个项目中搜索:这次的目标是找到对应的.java文件,我们要知道它是在哪里被赋值的。

7、根据控件的id找到对应的变量。

8、选中对应的变量按ctrl+shift+G找到将其赋值的地方:


9、我们可以看到它是通过aidl的回调方法,将这个值给反出来了。


10、继续跟踪他的变量mStatsObserver,分别点击进去,可以看到他在两个地方被使用过,而且两个地方都是通过.getPackageSizeInfo方法。


11、在PackageManager类中他是一个隐藏方法,等会我们可以通过反射获取,再调用此方法:
12、IPackageStateObserver.aidl文件是我们需要的,接着去“androidxref.com”中搜索,下载它的源码复制到我们的工程中即可。

13、因为IPackageStateObserver.aidl文件中还需要有一个PackageStats.aidl,一起下载下来即可。
     这里值得注意的是,在自己工程中要创建一个与aidl文件一致的包名。
14、参考系统代码获取到对应的值。
15、反射调用方法执行。
ps:
pm.getClass().getDeclareMethod("getPackageSizeInfo",String.class,IPackageStateObserver.class);
以上获取方式在4.1.2中是可以拿到的,但在以后的版本中,这种写法是有问题的。所以要用以下写法:

16、最后添加需要添加的权限,就可以获取到缓存信息了:
GET_PACKAGE_SIZE

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值