Effacer les données utilisateur de l’application Android

Utilisation du shell adb pour effacer les données d’application

adb shell pm clear com.android.browser 

Mais lors de l’exécution de cette commande depuis l’application

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

Problème:

Les données utilisateur ne sont pas effacées, ni aucune exception, même si j’ai donné l’autorisation suivante.

  

Question:

Comment effacer les données de l’application à l’aide du shell adb ?

Les données de l’application Browser ne sont PAS clivables pour d’autres applications, car elles sont private_mode dans private_mode . L’exécution de cette commande pourrait donc fonctionner uniquement sur des périphériques rootés. Sinon, vous devriez essayer une autre approche.

Cette commande a fonctionné pour moi:

 adb shell pm clear packageName 

La commande pm clear com.android.browser nécessite une autorisation root.
Donc, lancez su abord.

Voici l exemple de code:

 private static final Ssortingng CHARSET_NAME = "UTF-8"; Ssortingng 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(); Ssortingng result = stdoutReader.getResult(); 

La classe 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 SsortingngBuffer mBuffer; private Ssortingng mCharset; private CountDownLatch mCountDownLatch; StreamReader(InputStream is, Ssortingng charset) { this.is = is; mCharset = charset; mBuffer = new SsortingngBuffer(""); mCountDownLatch = new CountDownLatch(1); } Ssortingng getResult() { try { mCountDownLatch.await(); } catch (InterruptedException e) { e.printStackTrace(); } return mBuffer.toSsortingng(); } @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(); } } } 

Pour effacer les données d’application, essayez de cette façon.

  public void clearApplicationData() { File cache = getCacheDir(); File appDir = new File(cache.getParent()); if (appDir.exists()) { Ssortingng[] children = appDir.list(); for (Ssortingng 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()) { Ssortingng[] 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(); } 

Bonjour 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()){ Ssortingng[] children = appDir.list(); for(Ssortingng 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()) { Ssortingng[] 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(); } } 

S'il vous plaît vérifier ceci et faites le moi savoir ...

Vous pouvez télécharger le code à partir d' ici

adb désinstaller com.package.packagename

exécuter cette commande sur le shell ADB.

adb désinstaller com.package.packagename -k

-k conservera les données utilisateur

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

Si vous voulez le faire manuellement, vous pouvez également effacer vos données utilisateur en cliquant sur le bouton “Clear Data” dans Settings–>Applications–>Manage Aplications–> VOTRE APPLICATION.

 or Is there any other way to do that? 

Alors téléchargez le code ici

entrer la description de l'image ici