2016年5月9日 星期一

Android 使用adb的logcat指令抓取對應log level與tag的log資訊

由於筆者最近一般消費性平板或專業的開發板上開發的程式有不少麻煩的特性

例如
  1. 消費型平板或開發板的廠商自訂log訊息太多
  2. 消費型平板上唯一的micro USB port要拿來連結USB to UART轉接板(可用Android WiFi debug方式解決)
  3. Android framework層給的訊息少了log的時間要拿來debug不方便
  4. ..., etc.

考慮到以上的問題,筆者使用終端機開啟類似Android Studio上Android Monitor的logcat並將這些log存為文字檔後再進行分析

事前準備

  1. 安裝Android開發工具,不然至少要確定有安裝到adb的執行檔和adb的相依套件
  2. 確認環境變數
    Windows使用者請由控制台 -> 系統及安全性 -> 進階系統設定 -> 進階 -> 環境變數中確認使用者變數或是系統變數中的PATH是否有adb執行檔的路徑



    Mac/Linux使用者請確定自己的~/.bashrc或~/.zshrc中是否有加入adb的路徑

  3. 下指令測試adb是否能用
  4. # 使用adb version指令檢查adb是否可使用並且觀看adb版本 shiun@test:~$ adb version Android Debug Bridge version 1.0.32 Revision 09a0d98bebce-android

正式開工

  1. 開啟終端機
  2. 執行adb logcat -v time -s TestMainActivity列出所有以TestMainActivity作為tag的log訊息
  3. 下圖為log出來的結果,其中log訊息會包含時間, log level及log message

Android Wi-Fi debug功能

問題

  最近筆者在研究要怎麼使用Android消費型平板上的micro USB與Arduino或其他裝置透過UART進行溝通。但遇到一個非常麻煩的問題: 唯一的micro USB已經被UART轉板佔據住,沒辦法透過USB去抓debug訊息.........

  為了降低後續開發的痛苦,筆者試著找看看有沒有其他方式可以抓到debug訊息

Fig 1. Nexus 7 + USB OTG線 + USB to UART轉板

解決方案

  參考Android Developers網頁可以發現Android的設計上有Wireless debug[1]的方案,只需透過adb工具即可開啟Wi-Fi debug功能,詳細說明如下

  環境

  • Android裝置: Nexus 7 2013 + Android 6.0.1
  • 電腦: Macbook + OSX 10.11.4
  • adb 1.0.32

  步驟

  1. 使用USB線連結Android裝置與電腦
  2. 確認USB偵錯有開啟
  3. Fig 2. 開啟USB偵錯

  4. 將Android裝置連線到Wi-Fi的AP上,並找到Android裝置的IP
  5. 方法1: 由Android裝置的Wi-Fi設定找到目前IP位置,但並不是所有裝置都可以直接看到IP,例如筆者的Nexus 7就是不能透過此方法看到IP的機器之一.......
    Fig 3. 透過Wi-Fi設定找尋IP位置,筆者的Nexus 7不適用QQ.....

    方法2: 透過adb指令找到Android裝置的IP位置
    # 對Android裝置下ifconfig命令 # adb shell: 透過adb對Android裝置下指令 # ifconfig: 列出所有網卡的資訊 shiun@test:~$ adb shell ifconfig
    Fig 4. 透過adb指令找到IP位置為192.168.1.195

  6. 使用adb命令開啟Wi-Fi debug功能
  7. # 開啟Wi-Fi debug功能,並設定連線port 5555 shiun@test:~$ adb tcpip 5555 restarting in TCP mode port: 5555
  8. 拔掉USB連接線
  9. 在電腦端下連線指令
  10. # 連線至Android裝置 shiun@test:~$ adb connect 192.168.1.195 connected to 192.168.1.195:5555
  11. 接著到Android Studio上看結果


  12. 最後要收工的時候記得要關閉Wi-Fi debug功能
  13. # 關閉Wi-Fi debug功能 shiun@test:~$ adb usb restarting in USB mode

補充

  若讀者的Android裝置為已root裝置(adb shell進入後直接是root身份的開發板也行),則可考慮直接安裝WiFi ADB - Debug Over Air這套app即可

參考資料