Android tiene traccia di quando inizia?


19

Sto realizzando un'app di controllo parentale / responsabilità per Android. È costituito da un servizio di monitoraggio che viene eseguito in background e si avvia all'avvio del telefono.

Sfortunatamente, ho scoperto che quando Android viene avviato in "Modalità provvisoria", i servizi non vengono avviati automaticamente e per questo motivo la mia app presenta un grave difetto.

In modalità provvisoria, il Web e altre app possono essere avviate senza il mio servizio di monitoraggio in esecuzione.

Ho pensato che se non fosse possibile monitorare l'attività dell'app in modalità provvisoria, forse avrei potuto almeno far rilevare la mia app se il telefono era in modalità provvisoria in precedenza. Quindi potrebbe allertare il genitore o il partner responsabile?

Android tiene traccia di questo? O qualche registro di avvio in generale? Sono molto aperto a suggerimenti e alternative.


2
Spero vivamente che non ci sia modo di farlo.
RR

4
Penso che questo non dovrebbe essere chiuso. Gli sviluppatori non sono i soli che potrebbero essere interessati a questo.
RR

Sono d'accordo con @Richard. Non si tratta specificamente di una domanda di codifica, ma di come funziona Android.
Ale

Risposte:


13

Penso che ti sia beccato, insomma, niente che tu possa fare!

Dai un'occhiata a questa fonte che spiega perché, in particolare in questa sezione:

Partizione di sistema e modalità provvisoria

La partizione di sistema contiene il kernel di Android, nonché le librerie del sistema operativo, il runtime delle applicazioni, il framework delle applicazioni e le applicazioni. Questa partizione è impostata in sola lettura. Quando un utente avvia il dispositivo in modalità provvisoria, sono disponibili solo le applicazioni Android principali. Ciò garantisce che l'utente possa avviare il proprio telefono in un ambiente privo di software di terze parti.

Parole chiave è privo di software di terze parti

Modificare:

All'avvio di Android, mantiene una cache di logcat, in un buffer temporaneo che è riservato trovato in /dev/log. Quel buffer viene riciclato quando raggiunge la soglia, ovviamente, più grande è la soglia, più Android diventa lento con lo spamming continuo nel buffer logcat quindi ridotto al minimo - iirc, è circa 64K:

#define DEFAULT_LOG_ROTATE_SIZE_KBYTES 16
#define DEFAULT_MAX_ROTATED_LOGS 4

Fonte: system/core/logcat/logcat.cpp

Non chiedere quante righe possono essere, per ciascuna e per ogni app, le sue diverse. Non solo, il logcat scompare al riavvio!


2
Non hai davvero risposto alla domanda che hai appena ribadito ciò che sapeva, che la sua app non può monitorare in modalità provvisoria. Aggiungi qualcosa sui registri o sulle alternative della modalità provvisoria, quindi +1
Peanut,

1
@Peanut, Android registrerà comunque il logcat, ma solo i servizi principali, nient'altro! Non c'è alternativa a quello! E non c'è modo per le app di terze parti di riconoscere che è stata attivata una modalità sicura perché, la prossima volta che esce dalla modalità sicura, ovvero riavvia normalmente, le app di terze parti "pensano" che non sia accaduto nulla come in "niente da vedere qui ... spostati "
t0mm13b

1
Mi dispiace di aver modificato il mio commento prima di vederlo, ma come ho detto non hai davvero risposto alla sua domanda. Quindi un'alternativa sarebbe quella di verificare se il logcat era in esecuzione quando la sua app non lo era? Ovviamente questo richiederebbe alla persona di avviarlo non in modalità sicura ad un certo punto, ma almeno è una soluzione realistica.
Peanut,

Il contenuto del logcat ... viene scaricato al /dev/nullriavvio come "affari come al solito" ... solo dicendo .. :) E grazie per il downvote!
t0mm13b,

Ah, non ero a conoscenza di questo ^^ Voterò dato che offri una risposta alla sua domanda qui :) Penso che dovresti aggiungere le cose sui registri alla tua vera risposta. modifica: Oh, in realtà non posso votare fino a quando non modifichi la risposta: p
Peanut,

6

Non è la risposta migliore, ma forse le informazioni saranno utili.

L'unico metodo che conosco contiene un registro prodotto dal sistema dopo un riavvio /proc/last_kmsg .

Se il kernel conserva o meno questo file di registro dopo il riavvio, dipende dalle impostazioni fornite durante la compilazione del kernel.

La mia esperienza ha dimostrato che alcuni dispositivi stock (HTC) hanno abilitato questa registrazione e altri no. Non ho visto uno schema coerente.


Grazie! Dove hai imparato questo registro? Hai qualche suggerimento su come posso saperne di più su questi registri? C'è un riferimento da qualche parte?
jws121295

Nel caso in cui qualcuno vada come ho fatto io, il registro ora è in / sys / fs / pstore / console_ramoops. Non è un registro completo come dmesg, ma fondamentalmente contiene solo informazioni sull'ultimo panico del kernel e su ciò che lo ha portato.
Evan Langlois,

adb shell cp /sys/fs/pstore/console-ramoops /data/media/0/console-ramoops.`date "+%Y_%m_%d_%H_%M_%S"`.logfunziona con TWRP su OP3 con LineageOS basato su Android 8
beppe9000
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.