Zeichnet Android auf, wann es startet?

19

Ich mache eine App für elterliche Kontrolle / Verantwortlichkeit für Android. Es besteht aus einem Überwachungsdienst, der im Hintergrund ausgeführt wird und beim Starten des Telefons gestartet wird.

Leider habe ich festgestellt, dass beim Start von Android im "Abgesicherten Modus" die Dienste nicht automatisch gestartet werden und meine App aus diesem Grund einen schwerwiegenden Fehler aufweist.

Im abgesicherten Modus können das Web und andere Apps gestartet werden, ohne dass mein Überwachungsdienst ausgeführt wird.

Ich dachte, wenn es nicht möglich ist, die App-Aktivität im abgesicherten Modus zu überwachen, könnte ich zumindest meine App erkennen lassen, ob das Telefon zuvor im abgesicherten Modus war. Dann könnte es vielleicht den Elternteil oder den Verantwortungspartner alarmieren?

Führt Android ein Protokoll darüber? Oder irgendein Startprotokoll im Allgemeinen? Ich bin sehr offen für Vorschläge und Alternativen.

jws121295
quelle
2
Ich hoffe sehr, dass es keinen Weg gibt, dies zu tun.
RR
4
Ich denke, das sollte nicht geschlossen werden. Entwickler sind nicht die einzigen, die sich dafür interessieren könnten.
RR
Ich bin mit @Richard einverstanden. Dies ist keine spezielle Codierungsfrage, sondern die Funktionsweise von Android.
Ale

Antworten:

13

Ich denke, Sie haben sich erwischt, kurz gesagt, nichts, was Sie tun können!

Schauen Sie sich diese Quelle an , die erklärt, warum, speziell in diesem Abschnitt:

Systempartition und abgesicherter Modus

Die Systempartition enthält den Android-Kernel sowie die Betriebssystembibliotheken, die Anwendungslaufzeit, das Anwendungsframework und die Anwendungen. Diese Partition ist schreibgeschützt. Wenn ein Benutzer das Gerät im abgesicherten Modus startet, sind nur die wichtigsten Android-Anwendungen verfügbar. Dies stellt sicher, dass der Benutzer sein Telefon in einer Umgebung booten kann, die frei von Software von Drittanbietern ist.

Keywords sind frei von Software von Drittanbietern

Bearbeiten:

Wenn Android hochfährt, speichert es einen Cache der logcatin einem temporären Puffer, der reserviert ist /dev/log. Dieser Puffer wird recycelt, wenn er den Schwellenwert erreicht. Je größer der Schwellenwert ist, desto langsamer wird Android mit dem kontinuierlichen Spammen in den logcat-Puffer, wodurch er auf ein Minimum reduziert wird.

#define DEFAULT_LOG_ROTATE_SIZE_KBYTES 16
#define DEFAULT_MAX_ROTATED_LOGS 4

Quelle: system/core/logcat/logcat.cpp

Fragen Sie nicht, wie viele Zeilen für jede App unterschiedlich sein können. Nicht nur das, der Logcat verschwindet beim Neustart!

t0mm13b
quelle
2
Sie haben die Frage nicht wirklich beantwortet, Sie haben nur wiederholt, was er wusste, dass seine App im abgesicherten Modus nicht überwachen kann. Fügen Sie etwas zu den Protokollen oder Alternativen des abgesicherten Modus hinzu und dann +1
Peanut
1
@ Erdnuss, Android wird immer noch die logcat protokollieren, aber nur die Kerndienste, sonst nichts! Es gibt keine Alternative dazu! Und Apps von Drittanbietern können nicht erkennen, dass ein abgesicherter Modus aktiviert wurde, da Apps von Drittanbietern beim nächsten Verlassen des abgesicherten Modus, dh beim normalen Neustart, "denken", dass nichts passiert ist, wie in "hier nichts zu sehen". weitergehen "
t0mm13b 18.07.12
1
Tut mir leid, dass ich meinen Kommentar bearbeitet habe, bevor ich Ihren Kommentar gesehen habe, aber wie gesagt, Sie haben seine Frage nicht wirklich beantwortet. Eine Alternative wäre also zu prüfen, ob der Logcat lief, als seine App nicht lief? Offensichtlich würde dies erfordern, dass die Person es irgendwann nicht im abgesicherten Modus startet, aber es ist zumindest eine realistische Lösung.
Erdnuss
Die Logcat-Inhalte ... werden /dev/nullbeim Neustart wie bei "business as usual" gelöscht ... und sagen nur .. :) Und danke für die Ablehnung!
t0mm13b
Ah, mir war das nicht bewusst ^^ Ich werde abstimmen, da Sie hier eine Antwort auf seine Frage anbieten :) Ich denke, Sie sollten das Zeug über die Protokolle zu Ihrer tatsächlichen Antwort hinzufügen. Bearbeiten: Oh, ich kann nicht wirklich stimmen, bis Sie die Antwort bearbeiten: p
Erdnuss
6

Nicht die beste Antwort, aber vielleicht sind die Informationen nützlich.

Die einzige mir bekannte Methode, die ein vom System nach einem Neustart erstelltes Protokoll enthält, ist /proc/last_kmsg.

Ob der Kernel diese Protokolldatei nach einem Neustart beibehält oder nicht, hängt von den Einstellungen ab, die während der Kernel-Kompilierung angegeben wurden.

Meine Erfahrung hat gezeigt, dass bei einigen Standardgeräten (HTC) diese Protokollierung aktiviert ist, bei anderen nicht. Ich habe kein konsistentes Muster gesehen.

joeyk
quelle
Vielen Dank! Wo haben Sie von diesem Protokoll erfahren? Haben Sie Vorschläge, wie ich mehr über diese Protokolle erfahren kann? Gibt es irgendwo eine Referenz?
Jws121295
Falls sich jemand wie ich einschleicht, befindet sich das Protokoll jetzt in / sys / fs / pstore / console_ramoops. Es ist kein vollständiges Protokoll wie dmesg, sondern enthält im Grunde nur Informationen über die letzte Kernel-Panik und was dazu geführt hat.
Evan Langlois
adb shell cp /sys/fs/pstore/console-ramoops /data/media/0/console-ramoops.`date "+%Y_%m_%d_%H_%M_%S"`.logarbeitet mit TWRP auf OP3 mit Android 8-basierten LineageOS
beppe9000