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         }

 



 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。