Android 一键清除其他app的数据(快捷方便)

编程入门 行业动态 更新时间:2024-10-24 22:19:57

如何在自己的app里面,一键清除其他应用的数据???

看了很多网上的教程,80%都说需要将自己的app打包为系统应用,我想说这也太麻烦了吧,那几个aidl文件就得折腾好久,再别说拿到对应手机系统的签名了。

下面介绍一种简单快速地做法:

一、手机必须已经获取root权限

很多app可以帮你做到,比如:root精灵,SuperSU,KingRoot等

 

二、为自己开发的应用获取Root权限

代码里调用下面这个方法,第一次安装完运行后,会弹出为当前app进行root授权,同意后,你的app就拿到root权限了,下次再进入不会弹这个授权框。

代码如下:

/**
 * root工具类
 */
public class RootUtils {

    /**
     * 应用程序运行命令获取 Root权限,设备必须已破解(获得ROOT权限)
     *
     * pkgCodePath参数
     *
     * @param pkgCodePath 外存下的包名中的文件路径
     *                    可通过 {@link android.content.ContextWrapper}中的getPackageCodePath()方法 获取
     * @return 应用程序是/否获取Root权限
     */
    public static boolean upgradeRootPermission(String pkgCodePath) {
        Process process = null;
        DataOutputStream os = null;
        try {
            String cmd="chmod 777 " + pkgCodePath;
            process = Runtime.getRuntime().exec("su"); //切换到root,只在刚安装时,会弹出对话框确认一次
            os = new DataOutputStream(process.getOutputStream());

            os.writeBytes(cmd + " \n"); //pkgCodePath目录拿到读写执行权限
            os.flush();

            os.writeBytes("exit \n"); //退出命令
            os.flush();

        } catch (Exception e) {
            return false;
        } finally {
            try {
                if (os != null) {
                    os.close();
                }
                if (process != null) {
                    process.destroy();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return true;
    }
}

三、清除 “/data/data/其他app包名/” 目录下的数据

  1. 命令进入root权限
  2. 执行 chmod 777 /data/data/包名 ,可以拿到对该目录的读、写、执行权限
  3. 确定该目录下要清除的目录,一般就这四个:cache、databases、files、shared_prefs
  4. 执行 rm -rif /data/data/包名/cache ,依次强制清除这四个目录
  5. 执行 exit ,退出命令行

代码如下:

/**
     * 清除其他应用的所有数据
     */
    public boolean cleanOtherAppData(String packageName) {
        File file = new File("/data/data/" + packageName);
        System.out.println("包名为:" + packageName);

        if (file.exists()) {
            DataOutputStream os = null;
            Process p = null;

            try {
                p = Runtime.getRuntime().exec("su");// 获得root权限
                os = new DataOutputStream(p.getOutputStream());

                os.writeBytes("chmod 777 /data/data/" + packageName + "/ \n"); //拿到对应app包的读写执行权限
                os.flush();

                // data/data/packageName目录下要删除的文件夹
                List<String> list = new ArrayList<>();
                list.add("cache");
                list.add("databases");
                list.add("files");
                list.add("shared_prefs");
                for (int i = 0; i < list.size(); i++) {
                    os.writeBytes("rm -rif /data/data/" + packageName + "/" + list.get(i) + " \n");// 强制删除文件和文件夹
                    os.flush();
                }

                os.writeBytes("exit\n"); //退出命令
                os.flush();

                os.close();
                p.destroy();

                return true;

            } catch (IOException e) {
                try {
                    if (os != null) {
                        os.close();
                    }
                } catch (IOException e1) {
                    e1.printStackTrace();
                }
                if (p != null) {
                    p.destroy();
                }
            }
        }

        return false;
    }

四、使用

直接在Activity里面调用

//要删除的APP包名
private final String appPackageName = "com.hundsun.qy.hospitalcloud.bj.xhhosp.hsyy";
DataCleanManager dataCleanManager = new DataCleanManager(this);



if(RootUtils.upgradeRootPermission(getPackageCodePath())){
                    Toast.makeText(MainActivity.this, "已获取Root权限", Toast.LENGTH_SHORT).show();

                    //清除APP数据
                    if(dataCleanManager.cleanOtherAppData(appPackageName)){
                        Toast.makeText(MainActivity.this, "成功清除app数据", Toast.LENGTH_SHORT).show();
                    }else{
                        Toast.makeText(MainActivity.this, "清除app数据失败!!!", Toast.LENGTH_SHORT).show();
                    }
                }else{
                    Toast.makeText(MainActivity.this, "获取Root权限失败", Toast.LENGTH_SHORT).show();
                }

 

完美结束!!!!

 

附上源码地址:https://github/yeaper/ClearAppCache

里面加了个清除指定外存中的文件夹或者文件的功能,并且将清除操作信息打印出来,方便查看

效果图来一发:

更多推荐

Android 一键清除其他app的数据(快捷方便)

本文发布于:2023-06-14 07:17:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1450384.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:一键   快捷   数据   Android   app

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!