Как показать Активность ДО того, как мое приложение будет удалено (Android) [дубликат]

На этот вопрос уже есть ответ:

Можно ли обнаружить удаление приложения для Android? 7 ответов Выполнить задачу по удалению в Android [дубликат] 4 ответа

Хотя это было невозможно, но я заметил, что NQ Mobile Security может отображать сообщение после того, как я нажму «Удалить» и перед вызовом PackageUninstaller. Я хотел бы повторить это поведение в моем приложении.

Я пытался с помощью Activity, слушая «android.intent.action.DELETE» Intent, как было предложено здесь: Как узнать, что мое приложение удалено с устройства ...?

Но когда я собираюсь удалить свое приложение, появляется окно выбора с просьбой выбрать мое приложение или программу удаления пакета. Как я могу избежать этого?

Есть ли другой способ перехватить событие UNINSTALL вашего приложения? (прежде чем ответить, что это невозможно, попробуйте удалить NQ Mobile Security и посмотреть, что произойдет. На моем Android 2.3.4 отображается хороший экран с надписью, что без приложения безопасности работать небезопасно).

 Gaurav Agarwal15 июн. 2012 г., 21:50
Вы можете увидеть изображение удаления I.imgur.com / jJYRq.png, I.imgur.com / dTOT5.png а также I.imgur.com / vPL2W.png
 scorpiodawg15 июн. 2012 г., 20:46
Является ли ваше устройство рутованным или это обычное / неизмененное розничное устройство?
 scorpiodawg15 июн. 2012 г., 21:05
Похоже, я не могу принять изменения. Владелец / оригинальный постер может сделать это ...
 scorpiodawg15 июн. 2012 г., 20:52
Кстати, что за сообщение отображается при нажатии на «Удалить» для «NQ Mobile Security»? Это как-то связано с «политикой устройства» или «администратором устройства»?
 Gaurav Agarwal15 июн. 2012 г., 21:02
@ scorpiodawg, нет, не рутирован. Это немодифицированное розничное устройство. Я отредактировал вопрос и добавил изображения, как он удаляется, можете ли вы принять изменения?

Ответы на вопрос(5)

Решение Вопроса

что NQ Mobile Security может отображать сообщение после того, как я нажму «Удалить» и перед вызовом PackageUninstaller

Должно быть, они используют уязвимость в Android. Я исследую это и посмотрю, смогу ли я это исправить. Приложения не должны получить контроль во время удаления.

Спасибо за указание на это

Есть ли другой способ перехватить событие UNINSTALL вашего приложения?

Я надеюсь, что нет.

 Gaurav Agarwal15 июн. 2012 г., 19:50
Каковы проблемы / угроза безопасности, если приложение запускаетActivity илиIntentService во время удаления?
 Gaurav Agarwal17 июн. 2012 г., 09:21
@ TedHopp Вежливее всего, законное приложение никогда этого не сделает, а приложение со злым умыслом может причинить много другого вреда. Но полная блокировка такой функции может быть очень вредной для некоторых законных приложений, ищущих богатый пользовательский опыт.
 Alexander Mironov28 июн. 2012 г., 07:21
@ CommonsWare Есть ли прогресс в ваших исследованиях?
 CommonsWare28 июн. 2012 г., 12:31
@ Александр Миронов: Да. Если вы докажете мне, что являетесь сотрудником Google, работающим над проектом Android, я буду рад предоставить вам подробную информацию. Я уже отправил эти данные в группу безопасности Android.
 Sam30 мар. 2015 г., 10:40
Это даже не ответ; это больше похоже на комментарий. И не только это, вы на самом деле пытаетесь сделать так, чтобы людям было труднее сделать это! И я не вижу, как предотвратить это более безопасно, так как приложения могут по-прежнему запускать вредоносный код в различные другие моменты времени. Это раздражает пользователей, когда им приходится использовать специальный раздел удаления в вашем приложении.

вероятно, запрашивают очень критическое разрешение, которое пользователь дает им по незнанию. Посмотрите на вкладку «Разрешения» для этого приложения (по состоянию на 15.06.2012):https: //play.google.com/store/apps/details ID = com.nqmobile.antivirus20 & гектолитров = еп.

Список разрешений, которые получает это приложение, просто потрясающий. Среди прочего:

SYSTEM TOOLS - ПОЛУЧИТЬ РАБОЧИЕ ПРИЛОЖЕНИЯ Приложение сможет получать информацию о текущих и недавно запущенных задачах. Вредоносные программы могут обнаруживать личную информацию о других приложениях.

ИЗМЕНЕНИЕ / ИНТЕРЦЕПЦИЯ СЕТЕВЫХ ПАРАМЕТРОВ И ТРАФИКА Приложение сможет изменять настройки сети, перехватывать и проверять весь сетевой трафик, например, изменять прокси-сервер и порт любой APN. Вредоносные программы могут отслеживать, перенаправлять или изменять сетевые пакеты без вашего ведома.

ПРЕДОТВРАЩАТЬ ТАБЛЕТКУ ОТ СОНА ПРЕДОТВРАТИТЬ ТЕЛЕФОН ИЗ СНА Спать Приложение сможет предотвратить переход планшета в спящий режим. Приложение сможет предотвратить переход телефона в спящий режим.

ИЗМЕНИТЬ ВАШИ ПАРАМЕТРЫ UI Приложение сможет изменять текущую конфигурацию, например локаль или общий размер шрифта. ИЗМЕНИТЬ ГЛОБАЛЬНЫЕ ПАРАМЕТРЫ СИСТЕМЫ Позволяет приложению изменять данные настроек системы. Вредоносные программы могут повредить конфигурацию вашей системы.

DISPLAY SYSTEM-LEVEL ALERTS Позволяет приложению показывать окна системных предупреждений. Вредоносные программы могут занимать весь экран.

MOUNT И UNMOUNT FILESYSTEMS Позволяет приложению монтировать и размонтировать файловые системы для съемного хранилища.

ИЗМЕНЕНИЕ СЕТЕВОГО СОЕДИНЕНИЯ Позволяет приложению изменять состояние сетевого подключения.

CHANGE WI-FI STATE Позволяет приложению подключаться к точкам доступа Wi-Fi и отключаться от них, а также вносить изменения в настроенные сети Wi-Fi.

-- Обновить -

Я также обнаружил, что менеджер пакетов Android в значительной степени просто удаляет пакет, если его об этом просят.тольк проверьте, что он выполняет перед тем, чтобы убедиться в том, что удаляемый пакет в настоящее время зарегистрирован как имеющий активного администратора устройства:

    try {
        if (dpm != null && dpm.packageHasActiveAdmins(packageName)) {
            Slog.w(TAG, "Not removing package " + packageName + ": has active device admin");
            return PackageManager.DELETE_FAILED_DEVICE_POLICY_MANAGER;
        }
    } catch (RemoteException e) {
    }

См. Строку 6900 в PackageManagerService в источнике AOSPВо.

Для этого приложение должно быть явно зарегистрировано пользователем как администратор устройства. Смотрите примечания по администрированию устройства здесь:http: //developer.android.com/training/enterprise/device-management-policy.htm.

 Gaurav Agarwal15 июн. 2012 г., 22:51
Разрешение требуется дляDevice Administration является"android.permission.BIND_DEVICE_ADMIN. Не похоже, что приложение просит об этом?
 rolling.stones16 июн. 2012 г., 11:24
Я зарегистрировал свое приложение в качестве администратора устройства ... как я могу использовать вышеупомянутое обновление для вызова действия перед удалением приложения ??
 scorpiodawg15 июн. 2012 г., 21:01
Смотрите мое обновление выше. Я думаю, что если вы зарегистрируете свое приложение в качестве «администратора устройства», то здесь вы сможете кое-что сделать. В противном случае это не так (то есть, насколько я могу судить, у ОС нет такого положения
 Gaurav Agarwal16 июн. 2012 г., 22:20
Я начал новый вопрос по той же теме, посмотри / Stackoverflow.com вопросы / 11062780 / ...
 Gaurav Agarwal15 июн. 2012 г., 20:45
ok, вы дали отличный указатель для работы,Can user give permission to run an Activity while application is uninstalled?

что они контролируют LogCat для перехвата, когда Activity Manager вызывает PackageUninstaller. Я думаю, что они убивают задачу и начинают свою собственную деятельность. Это довольно умно, но оно определенно использует дыру в безопасности в Android.

 Gaurav Agarwal21 июн. 2012 г., 19:50
Я могу понять потенциальную угрозу для этого. Я добавил запрос функции здесь Code.google.com / р / Android / вопросы / ...

которое делает нечто подобное - после удаления открывает веб-страницу.

Как они это делают

При использовании libevent из нативного кода они просматривают каталог /data/data/com.opera.max, который необходимо удалить, а затем публикуют старые добрые сообщения action.VIEW, когда это происходит.

Установите их приложение, запустите его и на рутированном устройстве из оболочки adb удалите каталог /data/data/com.opera.max

UPDATE: я создал пример приложения, которое показывает, как оно работает. Кстати, он не работает с последними (KitKat +, я думаю) версиями Android:https: //github.com/pelotasplus/ActionAfterUninstal

 umni4ek09 дек. 2015 г., 15:26
А как это сделать? Я искал два дня, но не нашел ответа.
 pelotasplus09 дек. 2015 г., 15:13
нет, это не так. см. ОБНОВЛЕНИЕ в конце моего ответа. это был просто взлом.
 umni4ek09 дек. 2015 г., 15:12
Привет, это работает на Android 5? Я не могу заставить его работать.

https: //stackoverflow.com/a/26829978/131756, вот пример кода, который делает это:https: //github.com/zzljob/android-uninstall-feedback/blob/master/library/jni/feedback-uninstall.. Это на самом деле не остановит деинсталляцию, но дает возможность ее перехватить и предпринять некоторые действия. Я искренне удивлен, что это работает в Android, и команда, возможно, восполнила пробел в последних выпусках.

Ваш ответ на вопрос