Android tient-il un journal de son démarrage?

19

Je crée une application de contrôle parental / responsabilité pour Android. Il se compose d'un service de surveillance qui s'exécute en arrière-plan et démarre au démarrage du téléphone.

Malheureusement, j'ai constaté que lorsque Android est démarré en "Mode sans échec", les services ne sont pas démarrés automatiquement, et à cause de cela, mon application présente un grave défaut.

En mode sans échec, le Web et d'autres applications peuvent être démarrés sans mon service de surveillance en cours d'exécution.

Je pensais que s'il n'était pas possible de surveiller l'activité de l'application en mode sans échec, je pourrais peut-être au moins que mon application détecte si le téléphone était auparavant en mode sans échec. Cela pourrait alors alerter le parent ou le partenaire responsable?

Android garde-t-il un journal de cela? Ou tout journal de démarrage en général? Je suis très ouvert aux suggestions et alternatives.

jws121295
la source
2
J'espère vraiment qu'il n'y a aucun moyen de le faire.
RR
4
Je pense que cela ne devrait pas être fermé. Les développeurs ne sont pas les seuls à s'intéresser à cela.
RR
Je suis d'accord avec @Richard. Ce n'est pas spécifiquement une question de codage, mais sur le fonctionnement d'Android.
ale

Réponses:

13

Je pense que vous vous êtes rattrapé, bref, vous ne pouvez rien faire!

Jetez un œil à cette source qui explique pourquoi, en particulier 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 runtime d'application, le cadre d'application et les applications. Cette partition est définie en lecture seule. Lorsqu'un utilisateur démarre l'appareil en mode sans échec, seules les principales applications Android sont disponibles. Cela garantit que l'utilisateur peut démarrer son téléphone dans un environnement exempt de logiciels tiers.

Les mots clés sont exempts de logiciels tiers

Éditer:

Lorsque Android démarre, il conserve un cache de logcat, dans un tampon temporaire réservé dans /dev/log. Ce tampon est recyclé lorsqu'il atteint le seuil, évidemment, plus le seuil est élevé, plus Android est lent avec le spam continu dans le tampon logcat, donc réduit au minimum - iirc, son environ 64K:

#define DEFAULT_LOG_ROTATE_SIZE_KBYTES 16
#define DEFAULT_MAX_ROTATED_LOGS 4

La source: system/core/logcat/logcat.cpp

Ne demandez pas combien de lignes peuvent être différentes pour chaque application. Non seulement cela, le logcat disparaît au redémarrage!

t0mm13b
la source
2
Vous n'avez pas vraiment répondu à la question que vous venez de rappeler ce qu'il savait, que son application ne peut pas surveiller en mode sans échec. Ajoutez quelque chose sur les journaux ou les alternatives du mode sans échec, puis sur +1
Peanut
1
@Peanut, Android enregistrera toujours le logcat, mais seulement les services de base, rien d'autre! Il n'y a pas d'alternative à ça! Et il n'y a aucun moyen pour les applications tierces de reconnaître qu'un mode sans échec a été activé car, la prochaine fois que vous sortirez du mode sans échec, c'est-à-dire redémarrer normalement, les applications tierces "pensent" que rien ne s'est passé comme dans "rien à voir ici ... bouger le long "
t0mm13b
1
Désolé d'avoir modifié mon commentaire avant de voir votre commentaire, mais comme je l'ai dit, vous n'avez pas vraiment répondu à sa question. Une alternative serait donc de vérifier si le logcat était en cours d'exécution lorsque son application ne l'était pas? Évidemment, cela nécessiterait que la personne ne démarre pas en mode sans échec à un moment donné, mais au moins c'est une solution réaliste.
Peanut
Le contenu du logcat ... est vidé au /dev/nullredémarrage comme "business as usual" ... juste en disant .. :) Et merci pour le downvote!
t0mm13b
Ah, je n'étais pas au courant de ça ^^ Je voterai plus haut puisque vous offrez une réponse à sa question ici :) Je pense que vous devriez ajouter les informations sur les journaux à votre réponse réelle. modifier: Oh, je ne peux pas vraiment voter jusqu'à ce que vous modifiiez la réponse: p
Peanut
6

Ce n'est pas la meilleure réponse, mais peut-être que les informations seront utiles.

La seule méthode que je connaisse qui contient un journal produit par le système après un redémarrage /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 de stock (HTC) ont cette journalisation activée et d'autres pas. Je n'ai pas vu de schéma cohérent.

joeyk
la source
Je vous remercie! Où avez-vous entendu parler de ce journal? Avez-vous des suggestions sur la façon dont je peux en savoir plus sur ces journaux? Y a-t-il une référence quelque part?
jws121295
Au cas où quelqu'un se promènerait comme moi, le journal est maintenant dans / sys / fs / pstore / console_ramoops. Ce n'est pas un journal complet comme dmesg, mais contient simplement des informations sur la dernière panique du noyau et ce qui y a conduit.
Evan Langlois
adb shell cp /sys/fs/pstore/console-ramoops /data/media/0/console-ramoops.`date "+%Y_%m_%d_%H_%M_%S"`.logfonctionne avec TWRP sur OP3 avec LineageOS basé sur Android 8
beppe9000