清除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(); }
问题:
虽然我已经给出了下面的许可,但是并不清楚用户数据既没有给出任何例外。
<uses-permission android:name="android.permission.CLEAR_APP_USER_DATA"/>
题:
如何使用adb shell清除应用程序数据?
这个命令为我工作:
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 && 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?
然后在这里下载代码