android 清除其他应用数据

在调试某应用的时候,经常要清除apk初始化产生的数据,初始化会在/data/data/com.xxx.xx目录下和/sdcard/下新建很多文件,每次都要点到 设置->应用->软件名->清除数据。闲操作麻烦,想使用自动化一键清除。

0x1 穷举遍历删除文件夹

   开始想到的是获取su权限后枚举/data/data/com.xx.xx目录下的文件夹,逐个删除文件夹
 1 public static boolean removeAppData( String packageName )
 2     {
 3         File file = new File( "/data/data/" + packageName );
 4         System.out.println( "包名为:" + packageName );
 5         if ( file.exists( ) )
 6         {
 7             DataOutputStream os = null;
 8             DataInputStream is = null;
 9             DataInputStream es = null;
10             BufferedReader buf = null;
11             Process p = null;
12             try
13             {
14                 p = Runtime.getRuntime( ).exec( "su" );// 获得root权限
15                 os = new DataOutputStream( p.getOutputStream( ) );
16                 // is = new DataInputStream( p.getInputStream( ) );
17                 buf = new BufferedReader( new InputStreamReader( p.getInputStream( ) ) );
18                 es = new DataInputStream( p.getErrorStream( ) );
19                 os.writeBytes( "ls /data/data/" + packageName + "/ \n" );
20                 os.flush( );
21                 List< String > list = new ArrayList< String >( );
22                 list.add( "cache" );
23                 list.add( "databases" );
24                 list.add( "files" );
25                 list.add( "shared_prefs" );
26                 for ( int i = 0; i < list.size( ); i++ )
27                 {
28                     os.writeBytes( "rm -f -r /data/data/" + packageName + "/" + ( String ) list.get( i ) + " \n" );// 删除文件和文件夹
29                     System.out.println( "遍历 " + ( String ) list.get( i ) );
30                     os.flush( );
31                 }
32                 os.flush( );
33                 os.writeBytes( "exit\n" );
34                 os.flush( );
35                 os.close( );
36                 p.destroy( );
37             }
38             catch ( IOException e )
39             {
40                 try
41                 {
42                     os.close( );
43                     is.close( );
44                 }
45                 catch ( IOException e1 )
46                 {
47                     e1.printStackTrace( );
48                 }
49                 p.destroy( );
50             }
51             return true;
52         }
53         else
54         {
55             return false;
56         }
57     }
 

效果还行,使用穷举遍历文件夹名进行删除,虽说效率低下 起码想要的功能实现了


0x2 使用pm 命令删除


  无意在google看到某文章(研究删除数据到底会删除那些文件/夹)所使用的pm clear命令,尝试修改之后发现瞬间高大上!!!


 1 try
 2         {
 3             p = Runtime.getRuntime( ).exec( "su" );
 4             os = new DataOutputStream( p.getOutputStream( ) );
 5             is = new DataInputStream( p.getInputStream( ) );
 6             os.writeBytes( "pm clear " + packageName + " \n" );
 7             os.flush( );
 8             os.writeBytes( "echo test  \n" );// 回显test 并获得test,确保上面的代码已经执行
 9             os.flush( );
10             String result = is.readLine( );
11             os.writeBytes( "exit\n" );
12             os.flush( );
13             os.close( );
14             p.destroy( );
15         }
16         catch ( IOException e )
17         {
18             e.printStackTrace( );
19         }

				
时间: 2024-10-18 05:40:16

android 清除其他应用数据的相关文章

Android利用代码清除App的数据和重启设备

/** * 利用代码清除App的数据 * 平常我们在清除App的数据时,多半在设置中找到对应的App * 然后选择其清除数据.下面给出代码实现. * * 注意事项: * 1 设备需要root * 2 注意在命令的末尾需要加上换行\n * 这就相当于我们平时在Dos中输入命令后再换行一样. * 否则命令不会执行. */ private void cleanData(String packageName){ try { System.out.println("---> 9527 开始清除 &q

android蓝牙(二)——接收数据

在蓝牙开发中,我们有这样的一个需求:我们的android客户端要始终保持和蓝牙的连接,当蓝牙有数据返回的时候,android客户端就要及时的收取数据,当蓝牙没有数据返回的时候我们就要保持android客户端和蓝牙之间的连接.这个时候我们就要采取socket来实现和蓝牙之间的连接.做项目使用过http轮询去获取数据,但是发现那样总是有一定的弊端.于是就才用了socket方式去获取数据. 实现步骤:1.启动一个service去监听是否有数据返回.一旦有数据返回就启动一个线程去处理数据 2.处理完数据

android中Activity回传数据

比如从A跳转到B,然后等待从B回传数据: 那么在A中这样跳转: startActivityForResult(intent, 100); 后面那个requestCode要大于0: 然后在A中重写这个方法: @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { Log.e("onActivityResult", "onActivityResult&quo

Android基础知识(6)—数据持久化之数据存储

阅读前,请浏览此处上方目录. Android基础知识(6)-数据持久化之数据存储 本章内容为个人笔记,参考书籍有:<疯狂的android>第3版.<第一行代码> 首先,我们要知道什么是数据持久化. 数据持久化就是指那些内存中的瞬时数据保存到存储设备中,保证即使手机在关机的情况下,这些数据不会丢失.保存在内存中的数据是处于瞬时状态,保存在存储设备中的数据是处于持久状态.持久化技术则是提供了一种机制可以让数据在瞬时状态和持久状态之间进行转换. Android系统主要提供了三种方式用于简

Android 学习笔记之数据存储SharePreferenced+File

学习内容: Android的数据存储.... 1.使用SharedPreferences来保存和读取数据... 2.使用File中的I/O来完成对数据的存储和读取...   一个应用程序,经常需要与用户之间形成交互...需要保存用户的设置和用户的数据信息...这些都离不开数据的存储...Android的数据采用五种方式来进行存储...在这里就先介绍两种存储方式... 1.使用SharedPreferences存储数据...   对于软件配置参数的保存,Windows系统采用ini文件来进行保存,

Android客户端和服务器端数据交互

网上有很多例子来演示Android客户端和服务器端数据如何实现交互不过这些例子大多比较繁杂,对于初学者来说这是不利的,现在介绍一下代码最简单.逻辑最清晰的交互例子: 一.服务器端: 二.Android手机客户端:

Android Bundle传递简单数据、对象数据

Android开发过程中进程遇到组件之间.进程之间等数据的传递,数据传递有很多种,其中使用Bundle传递非常方便. Bundle可以传递多种数据,是一种类似map的key-value数据结构 简单的调用如下所示 Bundle bundle=new Bundle(); bundle.put***(key,value) 但是有时候需要我们传递一个对象,做法就是先把该对象使用serializable序列化 public class Book implements Serializable{ } 然后

Android定时器,更新数据

做个笔记,Android中常用的定时器,用于定时更新ui数据等. 1.Handler + Runnable定时器 private Handler mHandler; private Runnable mRunnable; mHandler = new Handler(); mRunnable = new Runnable() { public void run () { //更新数据的方法 update(); } }; //定时启动线程(执行的线程,时间毫秒) mHandler.postDela

Android -- 获取摄像头帧数据解码

由于Android下摄像头预览数据只能  ImageFormat.NV21 格式的,所以解码时要经过一翻周折. Camera mCamera = Camera.open(); Camera.Parameters p = mCamera.getParameters(); p.setPreviewFormat(ImageFormat.NV21); /*这是唯一值,也可以不设置.有些同学可能设置成 PixelFormat 下面的一个值,其实是不对的,具体的可以看官方文档*/ mCamera.setPa