您的位置:首页 > 移动开发 > Android开发

android 清除其他应用数据

2015-04-08 10:30 369 查看
在调试某应用的时候,经常要清除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( );
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 删除数据
相关文章推荐