Ситуация:
Автоматизация тестирования adnroid приложения, перед выполнением теста нужно почистить данные приложения. Что бы авто-тест начал работу с “чистого листа”, в ручную это можно сделать перейдя в настройки приложения и нажать кнопку “Очистить данные”. Вопрос в том как это сделать программно?
Использую UiAutomator 2.0. Так как apk с тестами собирается отдельно от тестируемого приложения, фактически это другое android приложение и например удалить папку с данными тестируемого приложения из /data/data для apk с тестами требуются права системного приложения.
Код типа:
((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)).clearApplicationUserData();
тоже требует прав системного приложения
Вопрос как почистить данные другого приложения не имея системных прав? или быть может можно при запуске указать приложению стартовать как будто с нуля не обращая на имеющиеся сохраненные данные.
Запуск приложения у меня выполняется так(может кому-то понадобится)
public static void launchPackage(UiDevice mDevice, String packageName) {
mDevice.pressHome();
Context context = InstrumentationRegistry.getContext();
final String launcherPackage = getLauncherPackageName();
mDevice.wait(Until.hasObject(By.pkg(launcherPackage).depth(0)), 5000);
final Intent intent = context.getPackageManager()
.getLaunchIntentForPackage(packageName);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(intent);
mDevice.wait(Until.hasObject(By.pkg(packageName).depth(0)), 5000);
}
private static String getLauncherPackageName() {
// Create launcher Intent
final Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
// Use PackageManager to get the launcher package name
PackageManager pm = InstrumentationRegistry.getContext().getPackageManager();
ResolveInfo resolveInfo = pm.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);
return resolveInfo.activityInfo.packageName;
}