1 votos

¿Cómo se reinicia una aplicación del sistema Android después de matarla en dispositivos rooteados?

Así que para aclarar, me gustaría saber cómo una aplicación del sistema es capaz de resucitar a sí mismo (auto-arranque) después de emitir un comando de matar. Hay maneras de eliminar las aplicaciones, mediante el uso de aplicaciones de eliminación de aplicaciones, así como directamente utilizando el comando rm para borrar físicamente el apk/odex y carpetas. Y hay un montón de respuestas sobre esto alrededor. Mi pregunta está relacionada con el propio "mecanismo" de autoarranque. Es decir, ¿hay algún archivo xml y algún proceso principal en ejecución que lo compruebe? O algo por el estilo. Como referencia, estoy usando Android 6.0.1 y MIUI 8.5.3 en un dispositivo Rooted.

Básicamente estoy explorando la posibilidad de que algunas aplicaciones del sistema que se eliminan (y luego envían el teléfono en bootloop) no son necesarios, pero el proceso de comprobación / intento de inicio es lo que hace que el bucle. El razonamiento es que, aparte del error "la aplicación dejó de funcionar", el sistema parece no estar afectado. Así que es el mensaje que está creando el problema y lo que está detrás de generarlo. Esta respuesta me permitirá probar esta posibilidad y publicar aquí los resultados.

Edit1: Así que parece que la respuesta a medio de mi propia pregunta, (asumiendo que no hay otra "magia negra" en marcha como otra aplicación que comprueba el estado...) - el reinicio se consigue probablemente a través de BroadcastReceiver .

Una aplicación puede Registrar un receptor de difusión para eventos del sistema . La forma en que funciona es que, cuando ocurre un evento en el sistema (se conecta el USB, se detecta Internet, etc.) se envía una transmisión a todas las aplicaciones que están registradas para escuchar este evento. Una aplicación puede registrarse a través de su AndroidManifest.XML o pragmáticamente. Pero la parte principal de la pregunta es donde es este registro y cómo es posible alterar (en un dispositivo rooteado, por supuesto)

Edit2: Un poco más de información. Si hago ps, el proceso se muestra como normal:

finddevice [....] SyS_epoll_ 7f83b48c54 S com.xiaomi.finddevice

Pero si renombro una carpeta de este proceso del sistema (para deshabilitarlo), y luego mato el proceso, parece que su hilo de enlace ( binder_thr ) tratando de devolverle la vida:

finddevice [....] binder_thr 7f83b48d44 S com.xiaomi.finddevice

Y en cuanto vuelvo a renombrar la carpeta a la original, vuelve a mostrarla como SyS_epoll_

0 votos

Las aplicaciones se registran (si lo necesitan) en el sistema para las transmisiones, como el cambio de conectividad de la red, el cambio de orientación del dispositivo, etc. Cuando se produce un cambio de este tipo, la transmisión activa la aplicación. Si tienes Xposed Framework instalado, prueba esto: repo.xposed.info/module/de.defim.apk.receiverstop y ver si la aplicación sigue despertando por sí sola.

0 votos

@Firelord Si estoy en lo cierto, entonces esto es factible incluso desde Criada SD para los usuarios que no son de Xposed.

0 votos

@DeathMaskSalesman Probado SD Maid, es una buena herramienta y funciona en algunas aplicaciones del sistema, pero no en todas. Dice "fallido" cuando intento desactivar sus oyentes en Receiver Manager.

0voto

Firelord Puntos 161

No podía comprender este código mucho, pero la información sobre los receptores parece mantenerse sólo en la memoria (no hay archivo de índice en el almacenamiento interno). Puede utilizar el siguiente comando para ver qué receptor está registrado para cada tipo de emisión.

adb shell dumpsys package

En cuanto a la desactivación de un receptor en particular, intente Elixir 2 . Puedes ir a su sección de Aplicaciones, elegir tu aplicación y luego desplazarte hacia abajo para encontrar los receptores (estáticos). Junto a ellos estaría la opción de desactivar ese componente.

Otra opción es utilizar ReceptorStop Módulo Xposed. Su versión gratuita permite deshabilitar los receptores de las apps instaladas por el usuario únicamente.

En cuanto a la línea de comandos, si sabes el nombre del receptor/componente, podrías hacerlo:

adb shell su -c 'pm disable PKG/COMP'         # where PKG is package name of the app and COMP is the component you intend to disable.

Dicho esto, no he probado si dichas soluciones funcionan para los receptores registrados dinámicamente.

0 votos

No hace falta decir que la respuesta es válida sólo para dispositivos Android rooteados.

1 votos

Bueno, esa es la cuestión, la desactivación de pm no funciona para estos paquetes de sistemas "duros". (Aunque sí funciona para algunas aplicaciones del sistema) Por ahora estoy usando un script que escribí para hacer la desactivación/activación de forma alternativa. script 1) renombra los archivos .apk y .odex y 2) mata el proceso. Esto crea un bucle infinito de pop-up que dice "unfourtunately..." Entonces vuelvo a activar el script. Y el proceso se reinicia solo y los errores desaparecen. Las aplicaciones que se comportan de esta manera, provocan un bootloop si reinicio, por lo que ahorra tiempo de pruebas.

1 votos

Gracias por el enlace de Elixir2, da detalles útiles adicionales. Pero al igual que SD Maid, no funciona para estas aplicaciones. Hacer clic en [desactivar] junto a Actividades/Receptores no tiene ningún efecto. ReceiverStop, como has dicho sólo da acceso a las apps del sistema en la versión de pago. Pero sólo lo necesito para hacer pruebas. Es decir, para eliminar los receptores y ver si la ROM sigue siendo estable. Si es así, entonces se identificaría el problema y trataría de llegar a un script para hacer esto de alguna manera.

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X