Android - удалить другое системное приложение как системное приложение - PullRequest
0 голосов
/ 13 ноября 2018

Мое приложение работает как системное приложение для пользовательского образа AOSP. Я могу удалить / установить другие APK, которые я загружаю из моего бэкэнда. Однако я не могу удалить другие системные приложения (что является жестким требованием для моей цели). Мой текущий механизм заключается в использовании механизма deletePackage из диспетчера пакетов Android с помощью отражения:

val cPackageManager = Class.forName("android.content.pm.PackageManager")
cPackageDeleteObserver = Class.forName("android.content.pm.IPackageDeleteObserver")
deletePackage = cPackageManager.getMethod("deletePackage", String::class.java, cPackageDeleteObserver, Integer.TYPE)
deletePackage!!.invoke(context.packageManager, packageName, deleteObserver, DELETE_ALL_USERS)

Кто-нибудь знает, как добиться того, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 13 ноября 2018
  1. Вам не нужно быть корневым устройством для удаления System apps, или вы нашли способ сделать это без рутирования?

  2. Вы должны remount система, поскольку вы запускаете SELinux, чтобы иметь возможность перегруппировать заблокированные файлы в системе.

3.Вы можете запустить этот код в своем приложении вместо

try{
 Process su = Runtime.getRuntime().exec("su");
 DataOutputStream outputStream = new DataOutputStream(su.getOutputStream());

 outputStream.writeBytes("pm uninstall com.package.name");
 outputStream.flush();
 outputStream.writeBytes("exit\n");
 outputStream.flush();
 su.waitFor();
}catch(IOException e){
 throw new Exception(e);
}catch(InterruptedException e){
 throw new Exception(e);
}

если pm uninstall не работает, используйте rm -rf path/deletefolder и перезагрузите систему

...