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

19

Estoy haciendo una aplicación de control parental / responsabilidad 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 hacer que mi aplicación detecte si el teléfono estaba anteriormente en modo seguro. Entonces, ¿podría alertar al padre o al socio responsable?

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

jws121295
fuente
2
Espero mucho que no haya forma de hacer esto.
RR
44
Creo que esto no debería cerrarse. Los desarrolladores no son los únicos que podrían estar interesados ​​en esto.
RR
Estoy de acuerdo con @Richard. Esta no es específicamente una pregunta de codificación, sino sobre cómo funciona Android.
ale

Respuestas:

13

Creo que te has sorprendido, en resumen, ¡nada que puedas hacer!

Eche un vistazo a esta 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 la aplicación, el marco de la aplicación y las aplicaciones. Esta partición está configurada en solo lectura. Cuando un usuario inicia el dispositivo en modo seguro, solo están disponibles las aplicaciones principales de Android. Esto garantiza que el usuario pueda iniciar su teléfono en un entorno libre de software de terceros.

Las palabras clave están libres de software de terceros

Editar:

Cuando se inicia Android, mantiene un caché de logcat, en un búfer temporal que se encuentra reservado 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 envío continuo de correo no deseado 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 pregunte cuántas líneas pueden ser, en cuanto a cada aplicación, es diferente. ¡No solo eso, el logcat desaparece al reiniciar!

t0mm13b
fuente
2
Realmente no respondiste la pregunta que acabas de repetir lo que sabía, que su aplicación no puede monitorear durante el modo seguro. Agregue algo sobre los registros o alternativas del modo seguro y luego +1
Peanut
1
@ Peanut, Android seguirá registrando el logcat, pero solo los servicios principales, ¡nada más! ¡No hay alternativa a eso! Y no hay forma de que las aplicaciones de terceros reconozcan que hubo un modo seguro activado porque, la próxima vez que salga del modo seguro, es decir, se reinicie normalmente, las aplicaciones de terceros "piensan" que nada ha sucedido como "nada que ver aquí ... avanzar "
t0mm13b
1
Lo siento, edité mi comentario antes de ver tu comentario, pero como dije, realmente no respondiste su pregunta. Entonces, ¿una alternativa sería verificar si el logcat se estaba ejecutando cuando su aplicación no? Obviamente, esto requeriría que la persona lo inicie no en modo seguro en algún momento, pero al menos es una solución realista.
Maní
El contenido de logcat ... se vacía /dev/nullal reiniciar como "business as usual" ... solo diciendo ... :) ¡Y gracias por el voto negativo!
t0mm13b
Ah, no estaba al tanto de eso ^^ Voy a votar ya que ofreces una respuesta a su pregunta aquí :) Sin embargo, creo que deberías agregar las cosas sobre los registros a tu respuesta real. editar: Oh, en realidad no puedo votar hasta que edite la respuesta: p
Peanut
6

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.

Si el kernel mantiene o no 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 habilitado y otros no. No he visto un patrón consistente.

joeyk
fuente
¡Gracias! ¿Dónde aprendiste sobre este registro? ¿Tiene alguna sugerencia sobre cómo puedo obtener más información sobre estos registros? ¿Hay alguna referencia en alguna parte?
jws121295
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 pánico del kernel y lo que condujo a él.
Evan Langlois
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
beppe9000