清理/data/data目录下的本地文件

在android里面第三方应用一般是没有对系统文件的读写权限,那如何进行/data/data目录下缓存的清理工作呢?


主要有两种思路:

一种通过ActivityManager的方法clearApplicationUserData()来完成,系统setting程序就是这么做的:

setting 源码中:ManageApplications类-->InstalledAppDetails类-->initiateClearUserData方法-->clearApplicationUserData()来实现。

顺便简单的说下ManageApplications类的一个跳转逻辑,ManageApplications类是一个Tabactivity,有4个tab:已下载、全部、sd卡、正在运行。

前三个逻辑都是一样的,就是上面这个逻辑,“正在运行”有点不同,ManageApplications类-->RunningProcessesView类-->RunningServiceDetails

类-->目标方法。

回到原来的话题,事实上clearApplicationUserData对开发者不可见,需要通过反射获得,同时这个方法还需要android.permission.CLEAR_APP_USER_DATA权限。想要这个权限,那么你的程序只能用mm命令来编译了。这种方法的操作的具体参考:http://bbs.51cto.com/thread-1034446-1.html


另一种方法可以通过linux的rm命令来完成,但需要root权限,而且想要删除某个文件,总得先读取删除的目录,但是/data/data/目录一般是不可读的,所以listFiles()的返回值一定是空的,想要读取/data/data目录,有两种方式:

第一,使用android自带的内部储存函数:getCacheDir,getDir,getFilesDir等,这种方法读取的目录有限,具体可参考:http://blog.csdn.net/hudashi/article/details/8037076

一般使用方法如下:

Context otherAppContext = mContext.createPackageContext(packageName, Context.CONTEXT_IGNORE_SECURITY);
File path = otherAppContext.getFilesDir();


第二种,先使用chmod 改变/data/data/packageName的读写权限,然后再使用listFiles来读取(这样就可以得到完全的目录内容,想删啥删啥):

//改变权重

 String cmd="chmod  755  /data/data/"+packageName;   

Process p = Runtime.getRuntime().exec("su");
DataOutputStream os =new DataOutputStream(p.getOutputStream());
os.writeBytes(cmd.toString() +"\n");
os.writeBytes("exit\n");
os.flush();

//读取目录

File app_path = new File("/data/data/"+packageName);
File [] files = app_path.listFiles();

        String delete= null;
for(File f:files){
//这里可以进行一些选择,删掉相应的文件
if(deleted==null){
delete =  " rm  -r " + f.toString() +"\n";
}else{
delete +=  " rm  -r " + f.toString() +"\n";
}
}

//最后执行命令delete

os.writeBytes(delete.toString() +"\n");
os.writeBytes("exit\n");
os.flush();


好的,至此我们自己写的程序已经可以删除其他应用程序在 /data/data/packgeName下面的缓存数据了!!!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值