清除数据和清除缓存的区别
反射调用系统隐藏接口,需要准备的东西:
一、在AndroidManifest.xml中的manifest标签下添加声明
android:sharedUserId="android.uid.system"
二、添加如下权限
三、使用系统签名给app进行签名
找到platform.pk8和platform.x509.pem和apksigner.jar三个文件,网上搜索制作系统签名文件的命令
最终生成plateform.keystore签名文件(附上某网盘制作好的系统签名,链接: https://pan.baidu.com/s/11dir8rTC_GxSGuG5El0nMg 提取码: ed33 )
四、创建 android.content.pm.IPackageDataObserver的aidl接口
// IPackageDataObserver.aidl
package android.content.pm;
interface IPackageDataObserver {
void onRemoveCompleted(in String packageName, boolean succeeded);
}
五、实现aidl接口回调监听
经过验证总结,得出如下结论:
1、清除缓存:
反射调用接口:PackageManager.deleteApplicationCacheFiles
它会清除以下项目:
A)清除data/data/{package_name}/cache/下的所有文件
B)清除data/data/{package_name}/code_cache/下的所有文件
C)清除mnt/sdcard/Android/data/{package_name}/下的cache文件夹
2、清除数据:
反射调用接口:ActivityManager.clearApplicationUserData
它会清除以下项目:
A)清除data/data/{package_name}/下的所有文件和文件夹(包括lib文件夹,PS:网上有人说lib文件夹和里面的内容不会被清除,经过验证,实际上也会清除)
B)清除mnt/sdcard/Android/data/下当前包名的文件夹
C)清除mnt/sdcard/Android/media/下当前包名的文件夹
D)清除{package_name}对应的app所有运行时权限的授权
E)清除所有通知,和该应用相关的所有URI授权(此项目为接口描述内容,未实际验证)
#但不会清除mnt/sdcard/Android/obb/{package_name}/下的内容
3、清除所有:
反射调用接口:PackageManager.freeStorageAndNotify
回调清除失败,不能清除任何数据。
附:
/mnt/sdcard/ = /storage/emulated/0/
/data/data/ = /data/user/0/
接口返回的目录具体地址:
getCacheDir=/data/user/0/{package_name}/cache
getFilesDir=/data/user/0/{package_name}/files
getDataDir=/data/user/0/{package_name}
getCodeCacheDir=/data/user/0/{package_name}/code_cache
getDir(“abcd”)=/data/user/0/{package_name}/app_abcd
getObbDir=/storage/emulated/0/Android/obb/{package_name}
getExternalCacheDir=/storage/emulated/0/Android/data/{package_name}/cache
getExternalFilesDir(“acbd”)=/storage/emulated/0/Android/data/{package_name}/files/abcd
getExternalMediaDirs[0]=/storage/emulated/0/Android/media/{package_name}