Очистить данные приложения Android

С помощьюadb shell очистить данные приложения

adb shell pm clear com.android.browser

Но при выполнении этой команды из приложения

String deleteCmd = "pm clear com.android.browser";      
        Runtime runtime = Runtime.getRuntime();
        try {
            runtime.exec(deleteCmd);
        } catch (IOException e) {
            e.printStackTrace();                
        }

Issue:

Он не очищает пользовательские данные и не дает никаких исключений, хотя я дал следующее разрешение.

<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"/>

Question:

Как очистить данные приложения, используяadb shell?

 StoneLam22 нояб. 2016 г., 12:15
Не думаю, что стороннее приложение должно иметь разрешение на очистку пользовательских данных другого приложения. Было бы беспорядок, если бы это случилось.
 Anshuman Jaiswal19 авг. 2013 г., 15:16
Нашли ли вы какое-либо решение для очистки данных для внешнего применения?

Ответы на вопрос(8)

adb uninstall com.package.packagename

выполнить эту команду на оболочке ADB.

adb uninstall com.package.packagename -k

-k сохранит пользовательские данные

    public void clearApplicationData() {
    File cache = getCacheDir();
    File appDir = new File(cache.getParent());
    if (appDir.exists()) {
        String[] children = appDir.list();
        for (String s : children) {
            if (!s.equals("lib")) {
                deleteDir(new File(appDir, s));Log.i("TAG", "**************** File /data/data/APP_PACKAGE/" + s + " DELETED *******************");
            }
        }
    }
}

public static boolean deleteDir(File dir) {
    if (dir != null &amp;&amp; dir.isDirectory()) {
        String[] children = dir.list();
        for (int i = 0; i < children.length; i++) {
            boolean success = deleteDir(new File(dir, children[i]));
            if (!success) {
                return false;
            }
        }
    }

    return dir.delete();
}
 UdayaLakmal07 июн. 2012 г., 17:10
Я пытаюсь это, используя это может очистить наши собственные данные кэша приложения, мне нужно очистить данные другого пользователя приложения из нашего приложения
 07 июн. 2012 г., 17:11
@UdayaLakmal. Предполагается, что вы не сможете очистить данные кеша другого приложения, поскольку android предназначен для защиты приложений от потенциально вредоносных действий со стороны других приложений.
Решение Вопроса

ений, поскольку они хранятся вprivate_mode, Таким образом, выполнение этой команды может работать только на корневых устройствах. В противном случае вы должны попробовать другой подход.

 07 июн. 2012 г., 17:10
Инструменты командной строки не предназначены для использования приложениями. Скорее всего, они будут работать только для полу привилегированного пользователя оболочки adb, который рассматривается как несколько сравнимый по полномочиям с пользователем, нажимающим кнопки в графическом интерфейсе, если приложение системных настроек.

то вы также можете очистить свои данные пользователя, нажав“Clear Data”  кнопка вSettings–>Applications–>Manage Aplications–>  ВАШЕ ПРИЛОЖЕНИЕ

or Is there any other way to do that?

затем Скачать код здесь

enter image description here

 08 июн. 2012 г., 08:39
если вы попробовали это, то, пожалуйста, поделитесь, что вы попробовали это. хорошо, позвольте мне проверить другой способ .. !!
 UdayaLakmal08 июн. 2012 г., 08:08
Я хочу сделать это прагматично, этот пример, который вы предлагаете, я уже пробовал, но это не то, что я ищу

Командаpm clear com.android.browser требует разрешения root.
Итак, бегиsu первый.

Here is the sample code:

private static final String CHARSET_NAME = "UTF-8";
String cmd = "pm clear com.android.browser";

ProcessBuilder pb = new ProcessBuilder().redirectErrorStream(true).command("su");
Process p = pb.start();

// We must handle the result stream in another Thread first
StreamReader stdoutReader = new StreamReader(p.getInputStream(), CHARSET_NAME);
stdoutReader.start();

out = p.getOutputStream();
out.write((cmd + "\n").getBytes(CHARSET_NAME));
out.write(("exit" + "\n").getBytes(CHARSET_NAME));
out.flush();

p.waitFor();
String result = stdoutReader.getResult();

The class StreamReader:

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.concurrent.CountDownLatch;

class StreamReader extends Thread {
    private InputStream is;
    private StringBuffer mBuffer;
    private String mCharset;
    private CountDownLatch mCountDownLatch;

    StreamReader(InputStream is, String charset) {
        this.is = is;
        mCharset = charset;
        mBuffer = new StringBuffer("");
        mCountDownLatch = new CountDownLatch(1);
    }

    String getResult() {
        try {
            mCountDownLatch.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        return mBuffer.toString();
    }

    @Override
    public void run() {
        InputStreamReader isr = null;
        try {
            isr = new InputStreamReader(is, mCharset);
            int c = -1;
            while ((c = isr.read()) != -1) {
                mBuffer.append((char) c);
            }

        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (isr != null)
                    isr.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            mCountDownLatch.countDown();
        }
    }
}

public class MyApplication extends Application {
    private static MyApplication instance;

    @Override
    public void onCreate() {
        super.onCreate();
        instance = this;
    }

    public static MyApplication getInstance(){
        return instance;
    }

    public void clearApplicationData() {
        File cache = getCacheDir();
        File appDir = new File(cache.getParent());
        if(appDir.exists()){
            String[] children = appDir.list();
            for(String s : children){
                if(!s.equals("lib")){
                    deleteDir(new File(appDir, s));
                    Log.i("TAG", "File /data/data/APP_PACKAGE/" + s +" DELETED");
                }
            }
        }
    }

    public static boolean deleteDir(File dir) {
        if (dir != null && dir.isDirectory()) {
            String[] children = dir.list();
            for (int i = 0; i < children.length; i++) {
                boolean success = deleteDir(new File(dir, children[i]));
                if (!success) {
                    return false;
                }
            }
        }

        return dir.delete();
    }
}

Пожалуйста, проверьте это и дайте мне знать ...

Вы можете скачать код сВот

// To delete all the folders and files within folders recursively
File sdDir = new File(sdPath);

if(sdDir.exists())
    deleteRecursive(sdDir);




// Delete any folder on a device if exists
void deleteRecursive(File fileOrDirectory) {
    if (fileOrDirectory.isDirectory())
    for (File child : fileOrDirectory.listFiles())
        deleteRecursive(child);

    fileOrDirectory.delete();
}
 09 мар. 2015 г., 22:16
Это позволит (если используется с соответствующим разрешением) удалить общие файлы на внешнем хранилище без учета связи приложения. Этоwill not удалите личные файлы любого приложения, о чем и был вопрос.

Эта команда работала для меня:

adb shell pm clear packageName
 07 февр. 2017 г., 13:42
@androiddeveloper Это тоже очистить кеш
 UdayaLakmal20 окт. 2014 г., 09:13
Проблема выполняется из приложения Android ...
 07 февр. 2017 г., 13:46
@EduardoCuomo Конечно. Я имел в виду: возможно ли использовать adb для очистки только кэша?
 04 янв. 2019 г., 06:56
@Shayan Вы можете воспользоваться следующей ссылкой, чтобы удалить только кэш приложения:stackoverflow.com/questions/18589471/…     Я не уверен, сработает эта команда или нет.
 05 янв. 2016 г., 16:53
можно ли использовать adb для очистки кеша тоже?

Ваш ответ на вопрос