Android Logcat 抓取テクニック教本、簡単にマスター:開発者でなくても理解できるlog取得テクニック!
- 今日は、Androidのログを簡単に取得するためのテクニックを皆さんに共有したいと思います!
開発過程でよくある問題:「ログを素早く取得する方法は?」
「テストや他の非開発者でも簡単にAndroidのログを取得する方法は?」
心配しないでください!簡単でわかりやすい方法をいくつかまとめましたので、開発とテストをより効率的に行うための助けになれば幸いです。
- Androidのログを取得するには、logcatというツールを使用しますが、logcatはシステム内部のログしか取得しないことに注意が必要です。
- 全体のログを取得する:コマンド
adb logcat
を使用して全体のログを取得できます。
特定のログだけを取得するためにフィルタ条件を指定することもできます。
詳細なフィルタ方法についてはフィルタログ参考を参照してください。 - 各バッファのサイズを確認する:コマンド
adb logcat -g
を使用して各バッファのサイズを確認できます。 - 異なるバッファ内のログを確認する:主要なバッファ以外にも、
radio、events、systemなどの他のバッファも確認できます。
以下のコマンドを使用して特定のログを確認できます。
[adb] logcat [-b 'buffer name']
ここで、
は確認したいバッファの名前です。
例:
メインバッファログ:
adb logcat -b main
イベントバッファログ:
adb logcat -b events
など - 各バッファの違いについては公式ドキュメントを参照してください:代替ログバッファの確認
- 全体のログを取得する:コマンド
su権限が必要
1. カーネルパニックログを取得する:adb pull /sys/fs/pstore/console-ramoops
2. カーネルログを出力する:adb shell cat /proc/kmsg(現在のログを取得し、同じコマンドを再度呼び出すと前回の終了後のログから表示されます)
3. Linuxカーネルリングバッファログ:adb shell su dmesg
dmesgコマンド参考
権限不要
1. ANRログを取得する:adb pull /data/anr
- adb logcatを使用して、現在接続されているデバイスのログを取得することもできます。例:
adb logcat
- この方法は、開発者が以下の方法でアプリ内にログ取得機能を組み込み、非開発者がログを取得できるようにするものです。
-
コマンドを実行するプロセスを開く: 例:
Runtime.getRuntime().exec("logcat -b radio")
-
Android 4.1以前では、
開発者はManifest.xmlに “READ_LOGS” 権限を追加することで、
su権限が必要なログを取得することができました。しかし、Android 4.1以降では、
Googleは “READ_LOGS” 権限を不良権限のトップ10にリストアップしたため、
使用が推奨されなくなりました。Google開発者の関連動画を参照してください。
Google開発者関連動画 -
そのため、Android 4.1以降では、アプリ内でログを取得する権限が
“signature|privileged”
に変更されました。 これはシステム署名
が必要であるか、 ビルドイメージ時に特権フォルダ../priv-app
にパッケージされたアプリ (特許権限ホワイトリスト) でなければREAD_LOGS
権限を取得できません。 -
PCからコマンドを実行する場合:
adb shell "pm grant <package name> android.permission.READ_LOGS && am force-stop <package name>"
これにより
READ_LOGS
権限を有効にし、アプリを強制終了します(コマンド実行後にアプリを再起動する必要があります)。 権限を無効にするにはgrant
をrevoke
に変更します。
-
-
開発者がAndroidアプリ内でログを対応するフォルダに書き込み、
その後adb pullで取得する -
例:アプリが完成した後、adb pullで取得する
adb pull /sdcard/Android/data/your.package.name/files/
- シェルスクリプトを使用してバックグラウンドでログを取得する
- ここでは簡単なスクリプトの例を紹介します:
1. 開発者がカスタマイズする場合は、上記のコードを完全に理解する必要があります。
2. 非開発者が上記のコードをtxtまたは空白のファイルにコピーする場合:
まず、PC環境にadbがインストールされていることを確認します。
packageName を指定のアプリパッケージ名に変更します。
adbPath をadbのシステムパスに変更します。
(非開発者が使用する場合、./adbを同じフォルダに配置し、adbがインストールされていないPCでも実行できるようにすることも可能です)
4. (オプション)出力されるログファイル名をカスタマイズすることも可能で、タイムスタンプを追加して区別することもできます。
- 最後にスクリプトを作成し、ターミナル(mac terminal / win cmd)で ./your_add_log.sh を実行します。
これでログ取得が開始されます!