20 votos

¿Guarda Android un registro de cuándo se inicia?

Estoy haciendo una aplicación de control parental/contabilidad para Android. Consiste en un servicio de monitorización que se ejecuta en segundo plano y se inicia al arrancar el teléfono.

Por desgracia, he descubierto que cuando Android se inicia en "Modo Seguro", los servicios no se inician automáticamente, y por ello mi aplicación tiene un grave fallo.

En modo seguro, la web y otras aplicaciones pueden iniciarse sin que se ejecute mi servicio de monitorización.

He pensado que si no es posible supervisar la actividad de las aplicaciones mientras están en modo seguro, tal vez pueda al menos hacer que mi aplicación detecte si el teléfono estuvo previamente en modo seguro. Entonces, ¿podría alertar a los padres o al compañero de responsabilidad?

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

13voto

Nick Pierpoint Puntos 7976

Creo que te has sorprendido a ti mismo, en resumen, ¡no puedes hacer nada!

Echa un vistazo a esto fuente que explica por qué, específicamente 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 las aplicaciones, el y las aplicaciones. Esta partición está configurada como de sólo lectura. Cuando un usuario arranca el dispositivo en modo seguro, sólo las aplicaciones principales de Android están disponibles. Esto asegura que el usuario pueda arrancar su teléfono en un entorno libre de software de terceros.

Las palabras clave son libre de software de terceros

Editar:

Cuando Android arranca, mantiene un caché de la logcat en un buffer temporal reservado que se encuentra en /dev/log . Ese búfer se recicla cuando alcanza el umbral, obviamente, cuanto más grande es el umbral, más lento se vuelve Android con el continuo spam 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 pueden ser, ya que para cada uno y para cada aplicación, es diferente. Y no sólo eso, ¡el logcat desaparece al reiniciar!

6voto

Catto Puntos 756

No es la mejor respuesta, pero tal vez la información sea algo útil.

El único método que conozco que contiene un registro producido por el sistema después de un reinicio es /proc/last_kmsg .

El hecho de que el kernel mantenga este archivo de registro después de un reinicio, depende de la configuración proporcionada durante la compilación del kernel.

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

0 votos

Gracias. ¿Dónde se enteró de este registro? ¿Tiene alguna sugerencia sobre cómo puedo conocer más registros de este tipo? ¿Hay alguna referencia en alguna parte?

0 votos

Por si alguien entra como yo, el registro está ahora en /sys/fs/pstore/console_ramoops. No es un registro completo como el dmesg, pero básicamente tiene información sobre el último pánico del kernel y lo que llevó a él.

0 votos

adb shell cp /sys/fs/pstore/console-ramoops /data/media/0/console-ramoops.`date "+%Y_%m_%d_%H_%M_%S"`.log funciona con TWRP en OP3 con LineageOS basado en Android 8

0voto

user1091091 Puntos 1

Si estás rooteado, yo sólo abriría Termux y lo haría:

sudo cat /proc/bootloader_log | less

O puedes usar la aplicación "LiveBoot" y te mostrará todos los procesos de arranque cada vez que enciendas el teléfono.

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