android - nada - Cómo borrar los datos de la aplicación mediante programación
liberar espacio almacenamiento interno android (11)
¿Cuál es la forma recomendada de hacerlo en forma programática?
La única opción posible es ejecutar el comando ADB adb shell pm clear package
antes de la prueba. El mayor problema es que es una especie de dolor de cabeza que combina la ejecución de pruebas y comandos de shell.
Sin embargo, nosotros (en Mediafe) presentamos una solución que puede funcionar para usted en un dispositivo sin raíz habitual. Todo lo que necesitas hacer es agregar una anotación. Todo lo demás se hace ejecutando script bash simple.
Simplemente agregue la anotación @ClearData
antes de que CUALQUIERA de sus pruebas y tada 🎉, el comando de borrado ADB se ejecute antes de la ejecución de la prueba.
Este es un ejemplo de tal prueba:
@Test
@ClearData
public void someTest() {
// your test
}
La idea es la siguiente
- Lea todas las pruebas usando
adb shell am instrument -e log true
- Construya el plan de ejecución analizando el resultado de (1)
- Ejecute el plan de ejecución línea por línea
Usando la misma idea, estas son todas las opciones que puede apoyar fácilmente:
- Borrar datos
- Borrar barra de notificaciones
- Parametrizar
- Filtrar y ejecutar por etiquetas
Use solo anotaciones. Me gusta esto:
@Test
@ClearData
@Tags(tags = {"sanity", "medium"})
@Parameterized.Repeat(count = 3)
public void myTest() throws Exception {
String param = params[index];
// ...
}
¡Prima! 🎁 Por cada prueba fallida:
- Recoger Logcat + stacktrace
- Grabar video (mp4)
- Dump DB (sqlite)
- Vuelca las preferencias compartidas predeterminadas (xml)
- Recoge archivos dumpsys como: batería, netstats y otros.
En general, es fácil agregar más opciones, ya que las pruebas se ejecutan una por una desde el script bash en lugar de la tarea gradle.
📗 La publicación completa del blog : https://medium.com/medisafe-tech-blog/running-android-ui-tests-53e85e5c8da8
📘 El código fuente con ejemplos : https://github.com/medisafe/run-android-tests
Espero que esto responda la pregunta de 6 años;)
Estoy desarrollando pruebas automatizadas para una aplicación de Android (usando Robotium). Para garantizar la consistencia y confiabilidad de las pruebas, me gustaría comenzar cada prueba con estado limpio (de la aplicación bajo prueba). Para hacerlo, necesito borrar los datos de la aplicación. Esto se puede hacer manualmente en Configuración / Aplicaciones / Administrar aplicaciones / [Mi aplicación] / Borrar datos
¿Cuál es la forma recomendada de hacerlo en forma programática?
Desde la API 19, es posible llamar a ActivityManager.clearApplicationUserData ().
((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).clearApplicationUserData();
Esta solución realmente me ha ayudado:
Al usar debajo de dos métodos, podemos borrar datos programáticamente
public void clearApplicationData() {
File cacheDirectory = getCacheDir();
File applicationDirectory = new File(cacheDirectory.getParent());
if (applicationDirectory.exists()) {
String[] fileNames = applicationDirectory.list();
for (String fileName : fileNames) {
if (!fileName.equals("lib")) {
deleteFile(new File(applicationDirectory, fileName));
}
}
}
}
public static boolean deleteFile(File file) {
boolean deletedAll = true;
if (file != null) {
if (file.isDirectory()) {
String[] children = file.list();
for (int i = 0; i < children.length; i++) {
deletedAll = deleteFile(new File(file, children[i])) && deletedAll;
}
} else {
deletedAll = file.delete();
}
}
return deletedAll;
}
La forma más simple de hacer esto es
private void deleteAppData() {
try {
// clearing app data
String packageName = getApplicationContext().getPackageName();
Runtime runtime = Runtime.getRuntime();
runtime.exec("pm clear "+packageName);
} catch (Exception e) {
e.printStackTrace();
}
}
Esto borrará los datos y eliminará tu aplicación de la memoria. Es equivalente a la opción de borrar datos en Configuración -> Administrador de aplicaciones -> Su aplicación -> Borrar datos.
Esto eliminará los datos por completo y forzará el cierre de la aplicación
Puede usar la herramienta del administrador de paquetes para borrar los datos de las aplicaciones instaladas (similar a presionar el botón ''borrar datos'' en la configuración de la aplicación en su dispositivo). Entonces, usando adb podrías hacer:
adb shell pm clear my.wonderful.app.package
Si tiene solo un par de preferencias compartidas para borrar, entonces esta solución es mucho más agradable .
@Override
protected void setUp() throws Exception {
super.setUp();
Instrumentation instrumentation = getInstrumentation();
SharedPreferences preferences = instrumentation.getTargetContext().getSharedPreferences(...), Context.MODE_PRIVATE);
preferences.edit().clear().commit();
solo = new Solo(instrumentation, getActivity());
}
Siguiendo a la respuesta de @ edovino, la forma de borrar todas las preferencias de una aplicación programáticamente sería
private void clearPreferences() {
try {
// clearing app data
Runtime runtime = Runtime.getRuntime();
runtime.exec("pm clear YOUR_APP_PACKAGE_GOES HERE");
} catch (Exception e) {
e.printStackTrace();
}
}
Advertencia : la aplicación forzará cerca.
Usando Context , podemos borrar archivos específicos de la aplicación como preferencia, archivo de base de datos. He utilizado el código a continuación para la prueba de UI con Espresso.
@Rule
public ActivityTestRule<HomeActivity> mActivityRule = new ActivityTestRule<>(
HomeActivity.class);
public static void clearAppInfo() {
Activity mActivity = testRule.getActivity();
SharedPreferences prefs =
PreferenceManager.getDefaultSharedPreferences(mActivity);
prefs.edit().clear().commit();
mActivity.deleteDatabase("app_db_name.db");
}
Verifique este código para:
@Override
protected void onDestroy() {
// closing Entire Application
android.os.Process.killProcess(android.os.Process.myPid());
Editor editor = getSharedPreferences("clear_cache", Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();
trimCache(this);
super.onDestroy();
}
public static void trimCache(Context context) {
try {
File dir = context.getCacheDir();
if (dir != null && dir.isDirectory()) {
deleteDir(dir);
}
} catch (Exception e) {
// TODO: handle exception
}
}
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;
}
}
}
// <uses-permission
// android:name="android.permission.CLEAR_APP_CACHE"></uses-permission>
// The directory is now empty so delete it
return dir.delete();
}
puede borrar los datos de la aplicación SharedPreferences con esto
Editor editor =
context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_PRIVATE).edit();
editor.clear();
editor.commit();
y para borrar la aplicación db, esta respuesta es correcta -> Borrar la base de datos de la aplicación
si la versión de Android está por encima del kitkat, puedes usar esto también
if (Build.VERSION_CODES.KITKAT <= Build.VERSION.SDK_INT) {
((ActivityManager) context.getSystemService(ACTIVITY_SERVICE))
.clearApplicationUserData();
return;
}