Clear android application user data

AndroidAdbUser Data

Android Problem Overview


Using adb shell we can clear application data.

adb shell pm clear com.android.browser

But when executing that command from the application

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

Issue:

It doesn't clear the user data nor give any exception though I have given the following permission.

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

Question:

How to clear another app application data using adb shell?

Android Solutions


Solution 1 - Android

This command worked for me:

adb shell pm clear packageName

Solution 2 - Android

Afaik the Browser application data is NOT clearable for other apps, since it is store in private_mode. So executing this command could probalby only work on rooted devices. Otherwise you should try another approach.

Solution 3 - Android

The command pm clear com.android.browser requires root permission.
So, run su first.

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

Solution 4 - Android

To clear Application Data Please Try this way.

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

Solution 5 - Android

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

Please check this and let me know...

You can download code from here

Solution 6 - Android

To clear the cache for all installed apps:

  • use adb shell to get into device shell ..
  • run the following command : cmd package list packages|cut -d":" -f2|while read package ;do pm clear $package;done

Solution 7 - Android

To reset/clear application data on Android, you need to check available packages installed on your Android device-

  • Go to adb shell by running adb shell on terminal
  • Check available packages by running pm list packages
  • If package name is available which you want to reset, then run pm clear packageName by replacing packageName with the package name which you want to reset, and same is showing on pm list packages result.

If package name isn't showing, and you will try to reset, you will get Failed status.

Solution 8 - Android

On mac you can clear the app data using this command

adb shell pm clear com.example.healitia

enter image description here

Solution 9 - Android

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

Solution 10 - Android

If you want to do manually then You also can clear your user data by clicking “Clear Data” button in Settings–>Applications–>Manage Aplications–> YOUR APPLICATION

or Is there any other way to do that?

Then Download code here

enter image description here

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionUdayaLakmalView Question on Stackoverflow
Solution 1 - AndroidManmohan SoniView Answer on Stackoverflow
Solution 2 - AndroidThkruView Answer on Stackoverflow
Solution 3 - AndroidfantouchView Answer on Stackoverflow
Solution 4 - AndroidMd Abdul GafurView Answer on Stackoverflow
Solution 5 - AndroidStriderView Answer on Stackoverflow
Solution 6 - AndroidBash StackView Answer on Stackoverflow
Solution 7 - AndroidPrakash SinhaView Answer on Stackoverflow
Solution 8 - AndroidUmer Waqas CEO FluttydevView Answer on Stackoverflow
Solution 9 - AndroidMy GodView Answer on Stackoverflow
Solution 10 - AndroidStriderView Answer on Stackoverflow