android 清除其他应用数据

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

0x1 穷举遍历删除文件夹

   开始想到的是获取su权限后枚举/data/data/com.xx.xx目录下的文件夹,逐个删除文件夹
public static boolean removeAppData( String packageName )
    {
        File file = new File( "/data/data/" + packageName );
        System.out.println( "包名为:" + packageName );
        if ( file.exists( ) )
        {
            DataOutputStream os = null;
            DataInputStream is = null;
            DataInputStream es = null;
            BufferedReader buf = null;
            Process p = null;
            try
            {
                p = Runtime.getRuntime( ).exec( "su" );// 获得root权限
                os = new DataOutputStream( p.getOutputStream( ) );
                // is = new DataInputStream( p.getInputStream( ) );
                buf = new BufferedReader( new InputStreamReader( p.getInputStream( ) ) );
                es = new DataInputStream( p.getErrorStream( ) );
                os.writeBytes( "ls /data/data/" + packageName + "/ \n" );
                os.flush( );
                List< String > list = new ArrayList< String >( );
                list.add( "cache" );
                list.add( "databases" );
                list.add( "files" );
                list.add( "shared_prefs" );
                for ( int i = 0; i < list.size( ); i++ )
                {
                    os.writeBytes( "rm -f -r /data/data/" + packageName + "/" + ( String ) list.get( i ) + " \n" );// 删除文件和文件夹
                    System.out.println( "遍历 " + ( String ) list.get( i ) );
                    os.flush( );
                }
                os.flush( );
                os.writeBytes( "exit\n" );
                os.flush( );
                os.close( );
                p.destroy( );
            }
            catch ( IOException e )
            {
                try
                {
                    os.close( );
                    is.close( );
                }
                catch ( IOException e1 )
                {
                    e1.printStackTrace( );
                }
                p.destroy( );
            }
            return true;
        }
        else
        {
            return false;
        }
    }

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

0x2 使用pm 命令删除

  无意在google看到某文章(研究删除数据到底会删除那些文件/夹)所使用的pm clear命令,尝试修改之后发现瞬间高大上!!!
try
        {
            p = Runtime.getRuntime( ).exec( "su" );
            os = new DataOutputStream( p.getOutputStream( ) );
            is = new DataInputStream( p.getInputStream( ) );
            os.writeBytes( "pm clear " + packageName + " \n" );
            os.flush( );
            os.writeBytes( "echo test  \n" );// 回显test 并获得test,确保上面的代码已经执行
            os.flush( );
            String result = is.readLine( );
            os.writeBytes( "exit\n" );
            os.flush( );
            os.close( );
            p.destroy( );
        }
        catch ( IOException e )
        {
            e.printStackTrace( );
        }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值