清除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(); } 

问题:

虽然我已经给出了下面的许可,但是并不清楚用户数据也不给出任何exception。

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

题:

如何使用adb shell清除应用程序数据?

Solutions Collecting From Web of "清除android应用程序用户数据"

这个命令为我工作:

 adb shell pm clear packageName 

命令pm clear com.android.browser需要root权限。
所以, su

这里是示例代码:

 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(); 

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 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(); } 

Afaik浏览器应用程序数据不能被其他应用程序清除,因为它存储在private_mode 。 所以执行这个命令可能只能在rooted设备上运行。 否则,你应该尝试另一种方法。

你好UdayaLakmal,

 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(); } } 

请检查这个,让我知道…

你可以从这里下载代码

adb卸载com.package.packagename

在ADBshell上执行这个命令。

adb卸载com.package.packagename -k

-k将保留用户数据

 // 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(); } 

如果您想手动执行操作,则还可以通过单击Settings–>Applications–>Manage Aplications–>您的应用Settings–>Applications–>Manage Aplications–> “Clear Data”button“Clear Data”用户数据

 or Is there any other way to do that? 

然后在这里下载代码

在这里输入图像说明