Как программно удалить системное приложение с телефона Android?

У меня есть приложение, которое находится в системной памяти телефона. Это своего рода приложение для блокировки телефона, для доступа к которому требуется пароль.

Мне нужно, чтобы приложение исчезло с телефона после ввода правильного пароля. Прямо сейчас я удалил приложение самостоятельно, используя Intent.DELETE при правильном пароле. Но проблема в том, что когда телефон сбрасывается до заводских настроек, приложение снова появляется с запросом пароля.

Итак, есть ли способ программно удалить системное приложение, чтобы оно не появлялось даже после сброса настроек телефона?

Я нашел пару сообщений здесь, в Stack Overflow, но не смог заставить код работать.

Как программно удалить системное приложение Android?

Как удалить собственное приложение из /system/app?


person Sheraz Arshad    schedule 13.10.2016    source источник
comment
например, во второй ссылке я не знаю, что передать функции 'deleteFromSystem'. Пожалуйста помоги   -  person Sheraz Arshad    schedule 13.10.2016


Ответы (2)


Когда вы создаете свое приложение как предустановленное приложение (system/app или system/priv-app), оно становится частью образа системы и системного раздела. Когда пользователь выполняет сброс до заводских настроек, устройство возвращается к исходному образу системы сборки, в вашем случае этот образ включает в себя приложение, которое, возможно, уже было удалено.

Оба решения, которые вы предоставили, пытаются удалить ваше приложение из системного раздела, который является разделом только для чтения (и не зря). Если вы хотите удалить файлы из этого раздела, вам придется перемонтировать его как раздел для чтения/записи и только потом удалять файлы.

Чтобы перемонтировать системный раздел, вам понадобится root-доступ, и, насколько мне известно, это будет невозможно из стандартного приложения Android.

Возможно, вы захотите использовать исполняемый демон, который имеет root-доступ и выполняет удаление за вас, но это довольно сложное решение.

Изменить:

То, что приложение является системным, не означает, что оно имеет root-доступ! Второй пример будет работать, только если все устройство рутировано. В этом случае безопасность вашего устройства крайне слаба. Если вы все еще хотите использовать этот подход, просто укажите путь к вашему apk (system/app/yourapp/yourapp.apk).l

person David Lev    schedule 13.10.2016
comment
само приложение будет в системном разделе, поэтому у него должен быть root-доступ - person Sheraz Arshad; 13.10.2016
comment
не могли бы вы сделать мне одолжение и выяснить, что нужно передать в качестве параметра в функцию deleteFromSystem во второй ссылке. - person Sheraz Arshad; 13.10.2016

Вы можете выполнять корневые команды следующим образом:

private void deleteApk(String packageName) {
    try {   
        final String command = "rm -rf /system/app/" + packageName;
        Process proc = Runtime.getRuntime().exec(new String[] { "su", "-c", command });
        proc.waitFor();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
person Community    schedule 10.11.2018