2012-06-07 11 views
67

Usando adb shell para borrar los datos de aplicacióndatos de usuario de aplicaciones para Android claras

adb shell pm clear com.android.browser 

pero cuando la ejecución de ese comando de la aplicación

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

Edición:

No hace aclarar los datos del usuario tampoco ofrece ninguna excepción, aunque he dado el siguiente permiso.

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

Pregunta:

Cómo borrar los datos de la aplicación usando adb shell?

+3

¿Ha encontrado ninguna solución para borrar los datos de aplicación fuera? –

+1

No crea que una aplicación de un tercero debe tener permiso para borrar los datos del usuario de otra aplicación. Sería un desastre si eso sucediera. – StoneLam

Respuesta

1

Los datos de la aplicación Afaik the Browser NO se pueden eliminar para otras aplicaciones, ya que se almacenan en private_mode. Por lo tanto, la ejecución de este comando podría probablemente solo funcionar en dispositivos rooteados. De lo contrario, deberías probar otro enfoque.

+0

Las herramientas de línea de comandos no están intdended para el uso de las aplicaciones. Es probable que solo funcionen para el usuario de shell adb semiprivilegiado, que se considera como algo comparable en autoridad a un usuario que presiona botones en la interfaz gráfica de usuario si la aplicación de configuración del sistema. –

2

Para borrar los datos de la aplicación, intente de esta manera.

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

Intento esto, usando esto puede borrar nuestros propios datos de caché de aplicaciones, necesito borrar los datos de otros usuarios de aplicaciones de nuestra aplicación – UdayaLakmal

+2

@UdayaLakmal, se supone que no puede borrar los datos de caché de otra aplicación, porque android está diseñado para proteger aplicaciones de acciones potencialmente maliciosas por otras aplicaciones. –

-4

Si usted quiere hacer manualmente, entonces también puede borrar sus datos de usuario haciendo clic “Clear Data” botón en Settings–>Applications–>Manage Aplications–> SU APLICACIÓN

or Is there any other way to do that? 

Entonces Download code here

enter image description here

+0

Quiero hacerlo de forma pragmática, ese ejemplo que sugieres que ya probé, pero eso no es lo que busco – UdayaLakmal

+0

si trataste de eso, por favor comparte que lo has intentado. ok, déjame ver de otra manera .. !! –

4

El comando pm clear com.android.browser requiere permiso de root.
Por lo tanto, ejecute su primero.

Aquí es el código de ejemplo:

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

La clase 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

Esto (si se usa con el permiso correspondiente) eliminaría los archivos compartidos en el Almacenamiento externo sin importar la asociación de la aplicación. ** No ** eliminará los archivos privados de ninguna aplicación, de lo que se trataba la pregunta. –

127

Este comando funcionó para mí:

adb shell pm clear packageName 
+3

El problema es ejecutarlo desde la aplicación de Android ... – UdayaLakmal

+1

¿es posible usar adb para borrar la caché también? –

+0

@androiddeveloper Esto borra el caché también –

0

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

Por favor marque esta y quiero saber ...

Puede descargar el código de here

0

com.package desinstalación ADB.Nombre del paquete

ejecute este comando en el shell ADB.

ADB com.package.packagename desinstalación -k

-k conservará los datos de usuario

Cuestiones relacionadas