Clear android application user data

后端 未结 7 701
走了就别回头了
走了就别回头了 2020-12-12 11:20

Using adb shell to clear application data

adb shell pm clear com.android.browser

But when executing that command from appl

7条回答
  •  佛祖请我去吃肉
    2020-12-12 12:19

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

提交回复
热议问题