20 votes

Est-ce qu'Android garde un registre des moments où il démarre ?

Je fais une application de contrôle parental/responsabilité pour Android. Elle consiste en un service de surveillance qui fonctionne en arrière-plan et démarre au démarrage du téléphone.

Malheureusement, j'ai découvert que lorsque Android est lancé en "mode sans échec", les services ne sont pas démarrés automatiquement, et à cause de cela, mon application a un sérieux défaut. En mode sans échec, le web et d'autres applications peuvent être lancés sans que mon service de surveillance ne fonctionne.

Je me suis dit que s'il n'était pas possible de surveiller l'activité des applications en mode sans échec, je pourrais peut-être au moins avoir un moyen de détecter si le téléphone était précédemment en mode sans échec.

Est-ce qu'Android conserve un registre de ces données ? Ou un journal de démarrage en général ? Je suis très ouvert aux suggestions et aux alternatives.

13voto

Nick Pierpoint Points 7976

Je pense que vous vous êtes fait avoir, en bref, vous ne pouvez rien faire !

Jetez un coup d'œil à ceci source qui explique pourquoi, notamment dans cette section :

Partition système et mode sans échec

La partition système contient le noyau d'Android ainsi que les bibliothèques du système d'exploitation, le moteur d'exécution des applications, le cadre des applications et les applications. Cette partition est définie en lecture seule. Lorsqu'un utilisateur démarre l'appareil en mode sans échec, des applications tierces peuvent être lancées manuellement par le propriétaire de l'appareil mais ne sont pas lancées par défaut.

Les mots-clés sont les applications tierces [...] ne sont pas lancées par défaut .


Lorsqu'Android démarre, il conserve une mémoire cache de la logcat dans un tampon temporaire qui est réservé, trouvé dans /dev/log . Ce tampon est recyclé lorsqu'il atteint le seuil, évidemment, plus le seuil est grand, plus Android est lent avec le spam continu dans le tampon de logcat donc maintenu au minimum - IIRC, il est autour de 64K :

#define DEFAULT_LOG_ROTATE_SIZE_KBYTES 16
#define DEFAULT_MAX_ROTATED_LOGS 4

Source : system/core/logcat/logcat.cpp

Ne demandez pas combien de lignes cela peut représenter, car pour chaque application, c'est différent. En plus de cela, le logcat disparaît au redémarrage !

6voto

Catto Points 756

La seule méthode que je connais qui contient un journal produit par le système après un redémarrage est la suivante /proc/last_kmsg . Le fait que le noyau conserve ou non ce fichier journal après un redémarrage dépend des paramètres fournis lors de la compilation du noyau.

Mon expérience a montré que certains appareils stockés (HTC) ont cette journalisation activée et d'autres non. Je n'ai pas vu de modèle cohérent.

0 votes

Merci ! Où avez-vous appris l'existence de ce journal ? Avez-vous des suggestions sur la façon dont je peux en apprendre davantage sur ces journaux ? Existe-t-il une référence quelque part ?

0 votes

Au cas où quelqu'un s'y aventurerait comme moi, le journal est maintenant dans /sys/fs/pstore/console_ramoops. Ce n'est pas un journal complet comme dmesg, mais il contient essentiellement des informations sur la dernière panique du noyau et ce qui l'a provoquée.

0 votes

adb shell cp /sys/fs/pstore/console-ramoops /data/media/0/console-ramoops.`date "+%Y_%m_%d_%H_%M_%S"`.log fonctionne avec TWRP sur OP3 avec LineageOS basé sur Android 8

0voto

user1091091 Points 21

Si vous êtes enraciné, je voudrais juste ouvrir Termux et le faire :

sudo cat /proc/bootloader_log | less

Vous pouvez aussi utiliser l'application "LiveBoot" qui vous montrera tous les processus de démarrage chaque fois que vous allumerez votre téléphone.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X