Cómo mostrar una actividad ANTES de desinstalar mi aplicación (Android)

Pensé que no era posible, pero noté que NQ Mobile Security puede mostrar un mensaje después de hacer clic en Desinstalar y antes de llamar al PackageUninstaller. Me gustaría replicar este comportamiento en mi aplicación.

Intenté con una Actividad que escuchaba la intención de “android.intent.action.DELETE”, como se sugiere aquí: ¿Cómo sé que mi aplicación se desinstaló del dispositivo …?

Pero como estoy a punto de desinstalar mi aplicación, aparece el selector que pregunta si debo elegir mi aplicación o el desinstalador del paquete. ¿Cómo puedo evitar esto?

¿Hay alguna forma diferente de interceptar su aplicación DESINSTALAR el evento? (Antes de responder que no es posible, intente desinstalar NQ Mobile Security y vea qué sucede. En mi Android 2.3.4 muestra una buena pantalla que dice que no es seguro ir sin una aplicación de seguridad).

Noté que NQ Mobile Security puede mostrar un mensaje después de hacer clic en Desinstalar y antes de que se llame al PackageUninstaller

Deben estar explotando algún defecto de seguridad en Android. Lo investigaré y veré si puedo repararlo. Se supone que las aplicaciones no tienen el control en el momento de la desinstalación.

¡Gracias por señalar esto!

¿Hay alguna forma diferente de interceptar su aplicación DESINSTALAR el evento?

Espero que no.

Opera Max es una aplicación que hace algo similar: una vez desinstalada, abre una página web.

¿Cómo lo hacen?

Al usar libevent, desde el código nativo, ven el directorio /data/data/com.opera.max que se eliminará y luego publican una buena acción antigua. La transmisión de Panotwig ocurre cuando sucede.

Instale su aplicación, ejecútela y en el dispositivo rooteado desde adb shell elimine el directorio /data/data/com.opera.max

ACTUALIZACIÓN: Creé una aplicación de muestra que muestra cómo funciona. Por cierto, no funciona con las últimas versiones de Android (KitKat + Creo): https://github.com/pelotasplus/ActionAfterUninstall

Probablemente pidan un permiso muy crítico que el usuario les otorgue sin saberlo. Mire la pestaña “Permisos” para esta aplicación (desde 15/6/2012): https://play.google.com/store/apps/details?id=com.nqmobile.antivirus20&hl=en .

La lista de permisos que obtiene esta aplicación es francamente escalofriante. Entre otras cosas:

HERRAMIENTAS DEL SISTEMA RECUPERACIÓN DE LAS APLICACIONES EN EJECUCIÓN Permite que la aplicación recupere información sobre las tareas que se están ejecutando actualmente y las que se están ejecutando recientemente. Las aplicaciones maliciosas pueden descubrir información privada sobre otras aplicaciones.

CAMBIAR / INTERFIRIR CONFIGURACIÓN DE RED Y TRÁFICO Permite que la aplicación cambie la configuración de red y que intercepte e inspeccione todo el tráfico de la red, por ejemplo, para cambiar el proxy y el puerto de cualquier APN. Las aplicaciones maliciosas pueden supervisar, redirigir o modificar paquetes de red sin su conocimiento.

EVITE QUE LA TABLETA SE DURE EL TELÉFONO EVITE EL DORMIR Permite que la aplicación evite que la tableta se quede dormida. Permite que la aplicación evite que el teléfono se quede dormido.

CAMBIAR LAS CONFIGURACIONES DE LA UI Permite que la aplicación cambie la configuración actual, como la configuración regional o el tamaño de fuente general. MODIFICAR CONFIGURACIONES DEL SISTEMA GLOBAL Le permite a la aplicación modificar los datos de configuración del sistema. Las aplicaciones maliciosas pueden dañar la configuración de tu sistema.

DISPLAY ALERTAS DE NIVEL DE SISTEMA Permite que la aplicación muestre las ventanas de alerta del sistema. Las aplicaciones maliciosas pueden ocupar toda la pantalla.

MOUNT AND UNMOUNT FILESYSTEMS Permite a la aplicación montar y desmontar sistemas de archivos para almacenamiento extraíble.

CAMBIAR LA CONECTIVIDAD DE LA RED Permite que la aplicación cambie el estado de la conectividad de la red.

CAMBIAR ESTADO WI-FI Permite que la aplicación se conecte y se desconecte de los puntos de acceso Wi-Fi y realice cambios en las redes Wi-Fi configuradas.

– Actualización –

También encontré que el Administrador de paquetes de Android simplemente elimina un paquete si se lo solicita. La única verificación que realiza antes de hacerlo es si el paquete que se está eliminando está actualmente registrado como si tuviera un administrador de dispositivo activo:

  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) { } 

Vea la línea 6900 en PackageManagerService en la fuente AOSP aquí .

Para esto, la aplicación debe registrarse explícitamente como administrador de dispositivo por parte del usuario. Consulte las notas sobre la administración del dispositivo aquí: http://developer.android.com/training/enterprise/device-management-policy.html .

Estoy bastante seguro de que están supervisando el LogCat para interceptar cuando el Activity Manager llama al PackageUninstaller. Creo que matan la tarea y comienzan su propia actividad. Es bastante inteligente, pero definitivamente está explotando un agujero de seguridad en Android.

Según https://stackoverflow.com/a/26829978/1317564 , aquí hay un código de ejemplo que lo hace: https://github.com/zzljob/android-uninstall-feedback/blob/master/library/jni/feedback -uninstall.c . Esto no impedirá que se lleve a cabo la desinstalación, pero brinda una manera de atraparlo y tomar alguna acción. Honestamente, estoy sorprendido de que esto funcione en Android y el equipo puede haber tapado la brecha en los últimos lanzamientos.