2012-06-07 5 views
67

Mit adb shell Anwendungsdatenlöschen Android-Anwendung Benutzerdaten

adb shell pm clear com.android.browser 

Aber löschen, wenn die Ausführung dieses Befehls aus der Anwendung

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

Ausgabe:

Es ist nicht Löschen der Benutzerdaten gibt keine Ausnahme, obwohl ich die folgende Erlaubnis gegeben habe.

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

Frage:

Wie die Anwendungsdaten löschen mit adb shell?

+3

Haben Sie eine Lösung finden, Daten für Außenanwendung löschen? –

+1

Denken Sie nicht, dass eine Anwendung eines Drittanbieters berechtigt sein sollte, Benutzerdaten einer anderen App zu löschen. Es wäre ein Durcheinander, wenn das passieren würde. – StoneLam

Antwort

1

Afaik Die Browser-Anwendungsdaten sind NICHT für andere Apps löschbar, da sie in private_mode gespeichert werden. Das Ausführen dieses Befehls könnte möglicherweise nur auf gerooteten Geräten funktionieren. Andernfalls sollten Sie einen anderen Ansatz versuchen.

+0

Die Befehlszeilentools sind nicht für die Verwendung durch Anwendungen vorgesehen. Wahrscheinlich werden sie nur für den halbprivilegierten adb-Shell-Benutzer funktionieren, der als etwas vergleichbar in der Autorität eines Benutzers angesehen wird, der Knöpfe in der GUI drückt, wenn die Systemeinstellungen-App. –

2

Um Anwendungsdaten zu löschen, versuchen Sie bitte diesen Weg.

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

Ich versuche dies, mit dieser können unsere eigenen Anwendung Cache-Daten löschen, muss ich eine andere App Benutzerdaten aus unserer Anwendung löschen – UdayaLakmal

+2

@UdayaLakmal Sie sollen nicht in der Lage, die Cache-Daten einer anderen Anwendung zu löschen, weil Android zum Schutz von Anwendungen entwickelt wurde vor potenziell böswilligen Aktionen anderer Anwendungen. –

-4

Wenn Sie manuell tun dann auch Sie können durch Klicken auf “Clear Data” Taste in Settings–>Applications–>Manage Aplications–> IHRE BEWERBUNG

or Is there any other way to do that? 

Dann Download code here

enter image description here

+0

Ich möchte das pragmatisch tun, dieses Beispiel schlage vor, dass ich bereits versucht habe, aber das ist nicht das, was ich suche – UdayaLakmal

+0

Wenn Sie das dann versucht haben, teilen Sie bitte, dass Sie das versucht haben. ok lass mich nach einem anderen Weg suchen .. !! –

4

Der Befehl Benutzerdaten löschen pm clear com.android.browser erfordert root-Berechtigung.
So zuerst su ausführen. Hier

ist der Beispielcode:

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

Die Klasse 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(); 
     } 
    } 
} 
-2
// 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(); 
} 
+1

Dies würde (wenn mit entsprechender Berechtigung verwendet) die freigegebenen Dateien auf dem externen Speicher ohne Berücksichtigung der App-Zuordnung löschen. ** löscht ** nicht die privaten Dateien einer App, worum es sich bei der Frage handelt. –

127

Dieser Befehl arbeitete für mich:

adb shell pm clear packageName 
+3

Problem wird ausgeführt, dass von Android-Anwendung ... – UdayaLakmal

+1

ist es möglich, adb zum Löschen des Cache zu verwenden? –

+0

@androiddeveloper Damit löschen Sie auch den Cache –

0

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

Bitte überprüfen Sie dies und lassen Sie mich wissen ...

Sie können Code herunterladen von here

0

adb deinstallieren com.package.Paketname

Diesen Befehl auf der ADB-Shell ausführen.

adb uninstall com.package.packagename -k

-k werden die Benutzerdaten

behalten