Андроид ведет логи когда он запускается?

19

Я делаю приложение родительского контроля / ответственности для Android. Он состоит из службы мониторинга, которая работает в фоновом режиме и запускается при загрузке телефона.

К сожалению, я обнаружил, что при запуске Android в «Безопасном режиме» службы не запускаются автоматически, и из-за этого у моего приложения есть серьезный недостаток.

В безопасном режиме Интернет и другие приложения могут быть запущены без запуска моей службы мониторинга.

Я подумал, что если невозможно отслеживать активность приложения в безопасном режиме, возможно, я мог бы, по крайней мере, заставить свое приложение определить, был ли телефон ранее в безопасном режиме. Тогда это может предупредить родителя или партнера по подотчетности?

Android ведет какой-либо журнал этого? Или вообще загрузочный журнал? Я очень открыт для предложений и альтернатив.

jws121295
источник
2
Я очень надеюсь, что нет способа сделать это.
RR
4
Я думаю, что это не должно быть закрыто. Разработчики не единственные, кто может быть заинтересован в этом.
ОР
Я согласен с @Richard. Это не вопрос кодирования, а вопрос о том, как работает Android.
Эль

Ответы:

13

Я думаю, что вы поймали себя, короче говоря, вы ничего не можете сделать!

Посмотрите на этот источник, который объясняет почему, именно в этом разделе:

Системный раздел и безопасный режим

Системный раздел содержит ядро ​​Android, а также библиотеки операционной системы, среду выполнения приложений, инфраструктуру приложений и приложения. Этот раздел доступен только для чтения. Когда пользователь загружает устройство в безопасном режиме, доступны только основные приложения Android. Это гарантирует, что пользователь может загрузить свой телефон в среде, свободной от стороннего программного обеспечения.

Ключевые слова свободны от стороннего программного обеспечения

Редактировать:

Когда Android загружается, он сохраняет кеш logcatво временном буфере, который зарезервирован в /dev/log. Этот буфер перерабатывается, когда он достигает порогового значения, очевидно, чем больше пороговое значение, тем медленнее работает Android с непрерывным спамом в буфере logcat, следовательно, поддерживается на минимальном уровне - iirc, его около 64 КБ:

#define DEFAULT_LOG_ROTATE_SIZE_KBYTES 16
#define DEFAULT_MAX_ROTATED_LOGS 4

Источник: system/core/logcat/logcat.cpp

Не спрашивайте, сколько строк может быть для каждого приложения разным. Не только это, logcat исчезает при перезагрузке!

t0mm13b
источник
2
Вы действительно не ответили на вопрос, вы только что повторили то, что он знал, что его приложение не может отслеживать в безопасном режиме. Добавьте что-нибудь о журналах безопасного режима или альтернативах, а затем +1
Peanut
1
@Peanut, Android по-прежнему будет регистрировать logcat, но только основные сервисы, больше ничего! Там нет альтернативы этому! И сторонние приложения не могут распознать, что активирован безопасный режим, потому что, когда в следующий раз выходят из безопасного режима, то есть перезагружаются нормально, сторонние приложения «думают», что ничего не произошло, как в «здесь ничего не видно ... двигаться вперед "
t0mm13b
1
Извините, я отредактировал свой комментарий до того, как увидел ваш комментарий, но, как я уже сказал, вы не ответили на его вопрос. Таким образом, альтернативой было бы проверить, работает ли logcat, когда его приложение не было? Очевидно, что для этого потребуется, чтобы человек в какой-то момент запустил его не в безопасном режиме, но, по крайней мере, это реалистичное решение.
арахис
Содержимое logcat ... сбрасывается /dev/nullпри перезагрузке, как "обычное дело" ... просто говорю ... :) И спасибо за понижение!
t0mm13b
Ах, я не знал об этом ^^ Я буду голосовать, так как вы предлагаете ответ на его вопрос здесь :) Я думаю, что вы должны добавить материал о журналах к вашему фактическому ответу. редактировать: О, я не могу на самом деле upvote, пока вы не отредактируете ответ: p
Арахис
6

Не лучший ответ, но, возможно, информация будет полезной.

Единственный известный мне метод, который содержит журнал, созданный системой после перезагрузки /proc/last_kmsg.

Сохраняет ли ядро ​​этот файл журнала после перезагрузки, зависит от настроек, предоставленных во время компиляции ядра.

Мой опыт показал, что на некоторых стоковых устройствах (HTC) эта регистрация включена, а на других нет. Я не видел последовательной картины.

joeyk
источник
Спасибо! Где вы узнали об этом журнале? Есть ли у вас какие-либо предложения относительно того, как я могу узнать больше об этих журналах? Где-нибудь есть ссылка?
jws121295
На случай, если кто-нибудь зайдет, как я, журнал теперь находится в / sys / fs / pstore / console_ramoops. Это не полный журнал, как dmesg, но в основном просто есть информация о последней панике ядра и что привело к ней.
Эван Ланглуа
adb shell cp /sys/fs/pstore/console-ramoops /data/media/0/console-ramoops.`date "+%Y_%m_%d_%H_%M_%S"`.logработает с TWRP на OP3 с Android 8 на основе LineageOS
beppe9000