系统隐藏了获得缓存的getPackageSizeInfo方法,我们可以用反射来调用该方法。
读取缓存文件大小需要添加权限:GET_PACKAGE_SIZE
首先将IPackageStatsObserver.aidl和PackageStats.aidl文件拷贝到android.content.pm包下。
再反射获得方法,后调用
Method getPackageSizeInfoMethod = null;
Method[] methods = PackageManager.class.getMethods();
for (Method method : methods) {
if("getPackageSizeInfo".equals(method.getName())){
getPackageSizeInfoMethod = method;
}
}
List<PackageInfo> infos = pm.getInstalledPackages(0);
for (PackageInfo info : infos) {
try {
getPackageSizeInfoMethod.invoke(pm, info.packageName,new myObserver());