Androidは起動時のログを保持しますか?


19

私はAndroid用のペアレンタルコントロール/説明責任アプリを作っています。バックグラウンドで実行され、電話の起動時に開始される監視サービスで構成されます。

残念ながら、Androidを「セーフモード」で起動すると、サービスが自動的に開始されないため、アプリに重大な欠陥があることがわかりました。

セーフモードで、監視サービスを実行しなくても、Webやその他のアプリを起動できます。

セーフモードでアプリのアクティビティを監視できない場合は、少なくとも電話が以前にセーフモードであったかどうかをアプリに検出させることができると考えました。次に、親または説明責任のパートナーに警告することができますか?

Androidはこのログを保持していますか?それとも一般的なブートログですか?私は提案や代替案を非常に受け入れています。


2
これを行う方法がないことを非常に望んでいます。
RR

4
これを閉じてはいけないと思います。これに興味を持つ可能性があるのは開発者だけではありません。
RR

@Richardに同意します。これは特にコーディングの質問ではなく、Androidの動作に関するものです。
エール

回答:


13

要するに、あなたは何もできないのです!

特にこのセクションでは、その理由を説明するこのソースをご覧ください。

システムパーティションとセーフモード

システムパーティションには、Androidのカーネルと、オペレーティングシステムライブラリ、アプリケーションランタイム、アプリケーションフレームワーク、およびアプリケーションが含まれます。このパーティションは読み取り専用に設定されています。ユーザーがデバイスをセーフモードで起動すると、コアAndroidアプリケーションのみが使用可能になります。これにより、ユーザーはサードパーティ製ソフトウェアのない環境で電話機を起動できます。

キーワードにはサードパーティのソフトウェアは含まれていません

編集:

Androidは起動時に、のキャッシュを、logcatにある予約済みの一時バッファーに保持し/dev/logます。そのバッファーはしきい値に達するとリサイクルされます。明らかに、しきい値が大きいほど、Androidがlogcatバッファーへの継続的なスパム送信で遅くなるため、最小限に抑えられます-iirc、約64K:

#define DEFAULT_LOG_ROTATE_SIZE_KBYTES 16
#define DEFAULT_MAX_ROTATED_LOGS 4

ソース: system/core/logcat/logcat.cpp

各アプリごとに異なる可能性のある行数は問わないでください。それだけではなく、logcatは再起動時に消えます!


2
彼が知っていること、つまり彼のアプリはセーフモードでは監視できないということを改めて述べた質問には、あなたは本当に答えていませんでした。セーフモードのログまたは代替について何かを追加してから+1
ピーナッツ

1
@ Peanut、Androidは引き続きlogcatをログに記録しますが、コアサービスのみを記録します。それに代わるものはありません!そして、サードパーティのアプリがセーフモードがアクティブになったことを認識する方法はありません。なぜなら、次回セーフモードから出るとき、つまり通常の再起動時に、サードパーティのアプリは「ここに何もない」のように何も起こらなかったからです...に沿って移動」
-t0mm13b

1
申し訳ありませんが、コメントを見る前にコメントを編集しましたが、私が言ったように、あなたは彼の質問に本当に答えていませんでした。それでは、代わりに、アプリが実行されていないときにlogcatが実行されているかどうかを確認します。明らかにこれには、ある時点でセーフモードではなく起動する必要がありますが、少なくとも現実的なソリューションです。
ピーナッツ

logcatの内容は/dev/null、再起動時に「通常どおりのビジネス」のようにフラッシュアウトされます...ただ言って.. :)そして、downvoteに感謝します!
t0mm13b

ああ、私はそのことに気づいていませんでした^^ここで彼の質問への回答を提供するので、投票します:)実際の回答にログに関するものを追加する必要があると思います。編集:ああ、私はあなたが答えを編集するまで実際に投票することはできません:p-
ピーナッツ

6

最良の答えではありませんが、情報は役に立つかもしれません。

私が知っている唯一の方法は、再起動後にシステムによって生成されたログを含むことです/proc/last_kmsg

カーネルが再起動後にこのログファイルを保持するかどうかは、カーネルのコンパイル中に提供される設定に依存します。

私の経験では、一部のストックデバイス(HTC)でこのロギングが有効になっており、他のデバイスでは無効になっていることが示されています。一貫したパターンは見ていません。


ありがとうございました!このログについてどこで知りましたか?これらのログの詳細についてどのように学習できるかについて、何か提案はありますか?どこかに参照がありますか?
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"`.logAndroid 8ベースのLineageOSを使用したOP3のTWRPで動作
beppe9000
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.