範例應用程式
如果使用 Google Home API 時遇到任何問題,可以收集記錄以進行進一步偵錯。如要從行動裝置收集記錄,必須使用 Android Debug Bridge (adb)。如果需要 Google 協助,請從 Android 裝置和中樞裝置收集記錄,並在問題追蹤器中開啟支援單,附上相關資訊和記錄。
收集 Android 記錄
行動裝置必須連線至本機,才能完成所有涉及 adb 的步驟。
安裝 adb
如果尚未在本機上設定 Android Debug Bridge,請按照下列步驟操作:
- 在電腦上安裝「adb」。
- 在 Android 手機上開啟「開發人員選項」和「USB 偵錯」。
取得行動裝置 ID
- 取得行動裝置 ID:
adb devicesList of devices attached device-id device
- 將這個值儲存在名為
phoneid的變數中:phoneid=device-id
版本資訊
建議您在決定收集記錄時,一併收集與設定相關的所有版本資訊。如要與 Google 分享問題,就必須提供這項資訊。
- 將各種裝置資訊儲存至變數:
containerinfo=$(adb -s $phoneid shell dumpsys package com.google.android.gms | grep -m 1 "versionName" || true); ghainfo=$(adb -s $phoneid shell dumpsys package com.google.android.apps.chromecast.app | grep -m 1 "versionName" || true); androidversion=$(adb -s $phoneid shell getprop ro.build.version.release || true); androidapiversion=$(adb -s $phoneid shell getprop ro.build.version.sdk || true); chimeradump=$(adb -s $phoneid shell dumpsys activity provider com.google.android.gms.chimera.container.GmsModuleProvider || true); homemoduleinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.home" || true); optionalhomemoduleinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.optional_home" || true); threadinfo=$(echo "$chimeradump" | grep -w "com.google.android.gms.threadnetwork" || true); enabledfeatures=$(echo "$chimeradump" | grep "Enabled features" | grep -i "home" | sort -u || true) - 將所有變數儲存至名為
_versions.txt的檔案:展開即可顯示將變數儲存至檔案的指令
您可以一次複製整個程式碼區塊,然後貼到終端機。
versionfile="_versions.txt" echo "Saving version info to $versionfile" echo "Container version: $containerinfo" > $versionfile echo "Home Module version: $homemoduleinfo" >> $versionfile echo "Optional Home Module version: $optionalhomemoduleinfo" >> $versionfile echo "Thread Module version: $threadinfo" >> $versionfile echo "GHA version: $ghainfo" >> $versionfile echo "Android version: $androidversion" >> $versionfile echo "Android API version: $androidapiversion" >> $versionfile echo "Found enabled features: $enabledfeatures" >> $versionfile
- 確認
_versions.txt的內容:cat _versions.txt現在可以視需要將這個檔案提供給 Google,以利進行疑難排解。展開即可顯示範例檔案輸出內容
Container version: versionName=26.26.34 (190400-945364269) Home Module version: com.google.android.gms.home [v262634001] Optional Home Module version: com.google.android.gms.optional_home [262634025] ... Thread Module version: com.google.android.gms.threadnetwork [v262634001] GHA version: versionName=4.22.28.0 Android version: 14 Android API version: 34 Found enabled features: Enabled features: appsearch_impl, brella_dynamite, dck_management...
啟用詳細偵錯旗標
收集 Android 裝置記錄或執行錯誤報告前,請先設定記錄器緩衝區空間,並為 Google Home 和 GMS 元件啟用詳細的偵錯標記:
# Clear existing device logs and expand logger buffer size
adb -s $phoneid logcat -b all -c
adb -s $phoneid logcat -G 8M
# Enable GMS Service ID verbose flags
adb -s $phoneid shell setprop log.tag.gms_svc_id:168 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:304 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:305 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:319 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:336 VERBOSE
adb -s $phoneid shell setprop log.tag.gms_svc_id:360 VERBOSE
# Enable GHP and Matter log tags
adb -s $phoneid shell setprop log.tag.CameraCommissioningPlugin VERBOSE
adb -s $phoneid shell setprop log.tag.HomeSdk VERBOSE
adb -s $phoneid shell setprop log.tag.HomeClient VERBOSE
adb -s $phoneid shell setprop log.tag.InteractionApiChimeraService VERBOSE
adb -s $phoneid shell setprop log.tag.MatterCommissioner VERBOSE
adb -s $phoneid shell setprop log.tag.SampleApp VERBOSE透過指令碼收集 Android 記錄
如要在偵錯工作階段期間擷取 Android 裝置的即時記錄,請按照下列步驟操作:
- 按照「啟用詳細偵錯標記」一文中的操作說明,清除現有記錄、擴大緩衝區空間,並設定詳細記錄標記。
- 關閉行動裝置上執行的所有應用程式。
- 開始測試前,請清除現有的記錄緩衝區雜訊:
adb -s $phoneid logcat -c - 在終端機視窗中啟動記錄檔收集程序:
請勿關閉這個終端機視窗。只要程序執行,系統就會持續擷取裝置記錄。adb -s $phoneid logcat | tee android-logs_$(date +%Y%m%d%H%M%S).txt - 執行應用程式,並執行重現問題所需的所有使用者介面動作。
- 完成後,請在終端機按下 Ctrl+C 鍵 (或 Mac 上的 Cmd+C 鍵),停止
logcat程序。 - 這個工作階段的記錄會儲存到「
android-logs_YYYYMMDDmmss.txt」。將android-logs_YYYYMMDDmmss.txt和_versions.txt附加到任何錯誤報告。
透過 adb 錯誤報告收集 Android 記錄
如要分享涵蓋系統層級問題、當機傾印或低層級網路和藍牙偵錯的詳細診斷資訊,請擷取完整的 Android 錯誤報告:
- Matter BLE 委派:回報有關 BLE 的 Matter 委派問題時,請先在「開發人員選項」中啟用「藍牙 HCI 窺探記錄」(依序前往「設定」 >「開發人員選項」 >「啟用藍牙 HCI 窺探記錄」),再重現問題。
- 測試前設定:執行測試前,請按照「啟用詳細偵錯標記」一節中的步驟,在裝置上啟用詳細偵錯屬性。
- 擷取錯誤報告:執行測試並重現問題後,請執行下列指令,產生完整的錯誤報告封存檔:
adb -s $phoneid bugreport ./android-bugreport_$(date +%Y%m%d%H%M%S).zip - 進階偵錯資訊:產生的
android-bugreport_YYYYMMDDmmss.zip檔案包含完整的系統層級診斷資料,包括完整系統傾印、記憶體統計資料、電池診斷和低階子系統追蹤記錄,可提供更進階的偵錯資訊。
Cast 中樞裝置記錄
你可以使用這個方法查看 Google Nest Hub 的裝置記錄,支援的機型如下:
- Google Home
- Google Nest Audio
- Google Nest Hub
- Google Nest Mini
如要啟用 Cast 中樞裝置,以便擷取本機記錄,請按照下列步驟操作:
- 設定 Android Debug Bridge。
取得中樞的 IP 位址:
- 如果中樞裝置有螢幕:
- 從畫面頂端向下滑動。
- 輕觸「設定」圖示
- 找出裝置的 IP 位址:在 Nest Hub (2nd gen) 上,依序前往「裝置資訊」>「技術資訊」>「IP 位址」
- 透過手機上的 GHA:
- 輕觸裝置,開啟裝置詳細資料頁面
- 輕觸「設定」圖示 開啟設定頁面
- 找出裝置 IP 位址:依序前往「裝置資訊」>「技術資訊」>「IP 位址」
- 如果中樞裝置有螢幕:
在與裝置連上相同 Wi-Fi 網路的電腦上:
adb connect ip-addressadb logcat如要將記錄提供給他人,請執行失敗的作業,並將輸出內容透過管道傳送至文字檔:
adb logcat -d > platform-logs.txt
自動化動作
邊緣偵測
Google Home 生態系統中的自動化動作具備邊緣偵測功能,這項邏輯會驗證啟動條件是否只在實際狀態變更時啟動,而非在狀態更新時啟動 (狀態更新只會重複裝置先前的狀態)。
舉例來說,如果開啟燈具是啟動條件,邊緣偵測功能會驗證啟動條件是否只在燈具從關閉變為開啟時啟動,而不是從開啟變為開啟 (沒有變化)。
自動化動作不如預期
考量邊緣偵測後,如果自動化動作未如預期運作,請採取下列行動:
檢查每部裝置,確認裝置是否能獨立於自動化動作正常運作。
查看自動化動作的自動化圖表,並與自動化動作 DSL 比較,找出您可能做出的任何錯誤假設。
在自動化動作執行期間,透過 Google Home 應用程式觀察裝置狀態。
確認自動化動作參照的所有裝置都位於預期結構中。刪除自動化動作所依附的裝置可能會導致非預期的後果。請參閱「刪除裝置對自動化作業的影響」。
自動化動作不應執行
如果自動化動作在不應啟動時啟動,請檢查啟動條件。 您可能需要新增額外邏輯,確保系統只擷取一次狀態變更,並只觸發一次自動化動作。
自動化動作無法編譯
請確認應用程式包含所有必要匯入項目,包括對應不同節點類型的每個類別,以及您參照的特徵。
自動化作業建立失敗,驗證未通過
如果自動化建立作業未通過驗證,系統會顯示警告或錯誤訊息,說明問題。詳情請參閱 ValidationIssueType 參考資料。
清單函式會擲回例外狀況
呼叫 Automation API List 函式時,讀取處理常式可能會因缺少 API 功能而擲回例外狀況。如要解決這個問題,請刪除受影響的自動化動作。
步驟如下:
- 確認已安裝
adb。請參閱安裝 adb。 叫用下列項目,從 Android 記錄中擷取自動化動作的 ID:
adb logcat -s GhpNative記錄範例:
adb logcat -s GhpNative level:debug | grep -A 10 -B 10 AutomationManagerTrait\.ListResponse INTERACTION RESPONSE -> SendCommandsResponse: 1 { 1: "automation@global" 3 { 1: "home.internal.traits.automation.AutomationManagerTrait.ListResponse" 2: 5 { 1: "type.googleapis.com/home.internal.traits.automation.AutomationManagerTrait.ListResponse" 1 { 1: "1111-2222-3333-44444-55555" // Automation ID to delete 2: "structure@2222-3333-4444-5555-6666" ...如要刪除多個自動化 ID,可以使用終端機分頁程式控制輸出內容:
adb logcat -s GhpNative level:debug | less使用自動化動作的 ID 刪除自動化動作:
structure.deleteAutomation(new object : HasId(id = "1111-2222-3333-44444-55555"))
取消註冊特徵時,Discovery API 會記錄警告
如果 Discovery API 記錄 Trait not found 的警告,表示 API 嘗試將特徵用於 Discovery 候選項目,但由於特徵未在初始化期間註冊,因此不會成功。例如:
09-03 17:45:20.578 10646 10646 W AutomationSdk: trait_id: "home.matter.6006.clusters.fc43" and Exception occurred com.google.home.HomeException: 18: Trait not found: home.matter.6006.clusters.fc43
09-03 17:45:20.578 10646 10646 W AutomationSdk: While converting candidate: # com.google.home.platform.traits.AutomationCandidateNode@76f0b582
特徵 ID 為 home.matter.6006.clusters.fc43,對應至 RelativeHumidityControl。如要根據 ID 判斷特徵名稱,請參閱特徵索引。
從這個範例來看,RelativeHumidityControl 需要在應用程式初始化期間註冊。請參閱「註冊特徵」一文,將特徵新增至登錄檔。
OAuth
如果您有現有的 OAuth 用戶端
如果您已為發布的應用程式建立經過驗證的 OAuth 用戶端,可以沿用現有的 OAuth 用戶端測試 Home API。
如要測試及使用 Home API,不需要進行 Google Home Developer Console 註冊。 不過,即使您有來自其他整合服務的已驗證 OAuth 用戶端,仍須通過Developer Console核准才能發布應用程式。
注意事項如下:
使用現有 OAuth 用戶端時,使用者人數上限為 100 人。如要瞭解如何新增測試使用者,請參閱「設定 OAuth 同意畫面。 除了 OAuth 驗證外,Google Home API 也設下限制,您的應用程式最多只能有 100 位使用者授予權限。 完成 Developer Console 註冊後,這項限制就會解除。
Developer Console 註冊 準備透過 OAuth 限制裝置類型授權,並更新應用程式以使用 Home API 時,應送交註冊以供核准。
如果 Google Cloud 應用程式的 OAuth 驗證仍在待處理狀態,使用者必須等到驗證完成,才能完成 OAuth 流程。嘗試授予權限時會失敗,並顯示下列錯誤訊息:
Access blocked: <Project Name> has not completed the Google verification process.