¿Android guarda un registro de cuándo arranca?

Estoy creando una aplicación de responsabilidad/control parental para Android. Consiste en un servicio de monitoreo que se ejecuta en segundo plano y se inicia cuando se inicia el teléfono.

Desafortunadamente, descubrí que cuando Android se inicia en "Modo seguro", los servicios no se inician automáticamente y, debido a esto, mi aplicación tiene una falla grave. Mientras está en modo seguro, la web y otras aplicaciones se pueden iniciar sin que se ejecute mi servicio de monitoreo.

Pensé que si no es posible monitorear la actividad de la aplicación mientras está en modo seguro, tal vez al menos podría tener una forma de detectar si el teléfono estaba previamente en modo seguro.

¿Android guarda algún registro de esto? ¿O cualquier registro de arranque en general? Estoy muy abierto a sugerencias y alternativas.

Respuestas (3)

Creo que te has pillado a ti mismo, en fin, ¡nada que puedas hacer!

Echa un vistazo a esta fuente que explica por qué, concretamente en esta sección:

Partición del sistema y modo seguro

La partición del sistema contiene el kernel de Android, así como las bibliotecas del sistema operativo, el tiempo de ejecución de la aplicación, el marco de la aplicación y las aplicaciones. Esta partición está configurada como de solo lectura. Cuando un usuario inicia el dispositivo en modo seguro, el propietario del dispositivo puede iniciar manualmente aplicaciones de terceros, pero no se inician de forma predeterminada.

Las palabras clave son aplicaciones de terceros [...] no se inician de forma predeterminada .


Cuando Android arranca, guarda un caché de logcat, en un búfer temporal reservado que se encuentra en /dev/log. Ese búfer se recicla cuando alcanza el umbral, obviamente, cuanto mayor es el umbral, más lento se vuelve Android con el spam continuo en el búfer logcat, por lo tanto, se mantiene al mínimo: IIRC, es alrededor de 64K:

#define DEFAULT_LOG_ROTATE_SIZE_KBYTES 16
#define DEFAULT_MAX_ROTATED_LOGS 4

Fuente: system/core/logcat/logcat.cpp

No preguntes cuántas líneas puede haber, ya que para todas y cada una de las aplicaciones, es diferente. ¡No solo eso, el logcat desaparece al reiniciar!

El único método que conozco que contiene un registro producido por el sistema después de reiniciar es /proc/last_kmsg. Si el núcleo mantiene o no este archivo de registro después de un reinicio depende de la configuración proporcionada durante la compilación del núcleo.

Mi experiencia ha demostrado que algunos dispositivos de stock (HTC) tienen habilitado este registro y otros no. No he visto un patrón consistente.

¡Gracias! ¿Dónde aprendiste acerca de este registro? ¿Tiene alguna sugerencia sobre cómo puedo obtener más información sobre estos registros? ¿Hay alguna referencia en alguna parte?
En caso de que alguien entre como yo, el registro ahora está en /sys/fs/pstore/console_ramoops. No es un registro completo como dmesg, pero básicamente solo tiene información sobre el último kernel panic y lo que lo condujo.
adb shell cp /sys/fs/pstore/console-ramoops /data/media/0/console-ramoops.`date "+%Y_%m_%d_%H_%M_%S"`.logfunciona con TWRP en OP3 con LineageOS basado en Android 8

Si está rooteado, simplemente abriría Termux y haría:

sudo cat /proc/bootloader_log | less

O puede usar la aplicación "LiveBoot" y le mostrará todos sus procesos de arranque cada vez que encienda su teléfono.