عیب‌یابی

برنامه نمونه

اگر هنگام استفاده از Home API با مشکلی مواجه شدید، می‌توانید گزارش‌ها را برای اشکال‌زدایی بیشتر جمع‌آوری کنید. جمع‌آوری گزارش‌ها از دستگاه همراه به Android Debug Bridge (adb) نیاز دارد. اگر به کمک Google نیاز دارید، گزارش‌ها را از دستگاه‌های Android و هاب جمع‌آوری کنید و با اطلاعات و گزارش‌های مربوطه، تیکتی در ردیاب مشکل باز کنید.

جمع‌آوری گزارش‌های Android

دستگاه همراهتان باید برای همه مراحل مربوط به adb به دستگاه محلی‌تان متصل باشد.

نصب adb

اگر قبلاً این کار را نکرده‌اید، Android Debug Bridge را در ماشین محلی‌تان راه‌اندازی کنید:

  1. «adb» را در رایانه‌تان نصب کنید.
  2. «گزینه‌های توسعه‌دهنده» و «اشکال‌زدایی USB» را در تلفن Android روشن کنید.

دریافت شناسه دستگاه همراه

  1. شناسه دستگاه همراهتان را دریافت کنید:
    adb devices
    List of devices attached
    device-id    device
  2. این مقدار را در متغیری به‌نام phoneid ذخیره کنید:
    phoneid=device-id

اطلاعات نسخه

توصیه می‌کنیم هر زمان که تصمیم به جمع‌آوری گزارش‌ها گرفتید، همه اطلاعات نسخه مربوط به راه‌اندازی‌تان را جمع‌آوری کنید. اگر لازم است مشکلات را با Google هم‌رسانی کنید، این کار الزامی است.

  1. اطلاعات مختلف دستگاه را در متغیرها ذخیره کنید:
    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)
  2. همه متغیرها را در فایلی با نام _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
  3. درستی‌سنجی محتوای _versions.txt:
    cat _versions.txt

    ازهم باز کردن برای نمایش برونداد فایل نمونه

    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...
    اکنون این فایل می‌تواند درصورت نیاز برای عیب‌یابی به Google ارائه شود.

فعال کردن پرچم‌های اشکال‌زدایی مفصل

قبل‌از جمع‌آوری گزارش‌های دستگاه 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 displaying seconds on the screen
adb -s $phoneid shell settings put secure clock_seconds 1

# 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 درطول جلسه اشکال‌زدایی:

  1. دستورالعمل‌های فعال کردن پرچم‌های اشکال‌زدایی مفصل را دنبال کنید تا گزارش‌های موجود را پاک کنید، اندازه میان‌گیر را گسترش دهید، و برچسب‌های ثبت گزارش مفصل را تنظیم کنید.
  2. همه برنامه‌های درحال اجرا در دستگاه همراه را ببندید.
  3. قبل‌از شروع آزمایش، نویز میان‌گیر گزارش موجود را پاک کنید:
    adb -s $phoneid logcat -c
  4. فرایند جمع‌آوری گزارش را در پنجره ترمینال شروع کنید:
    adb -s $phoneid logcat | tee android-logs_$(date +%Y%m%d%H%M%S).txt
    این پنجره ترمینال را باز بگذارید. تا زمانی که این فرایند اجرا می‌شود، گزارش‌های دستگاهتان ضبط خواهد شد.
  5. برنامه‌تان را اجرا کنید و همه کنش‌های میانای کاربر را که برای بازتولید مشکل لازم است انجام دهید.
  6. پس‌از اتمام، فرایند logcat را در پایانه با فشار دادن Ctrl+C (یا Cmd+C در Mac) متوقف کنید.
  7. گزارش‌های این جلسه در android-logs_YYYYMMDDmmss.txt ذخیره شده است. هر دو android-logs_YYYYMMDDmmss.txt و _versions.txt را به گزارش‌های اشکال پیوست کنید.

جمع‌آوری گزارش‌های Android با گزارش اشکال adb

وقتی لازم است اطلاعات تشخیصی دقیقی را هم‌رسانی کنید که شامل مشکلات سطح سیستم، رونوشت‌های خرابی، یا اشکال‌زدایی سطح پایین شبکه و بلوتوث می‌شود، گزارش اشکال کامل Android را ضبط کنید:

  • راه‌اندازی Matter BLE: هنگام گزارش کردن مشکل راه‌اندازی Matter مربوط به BLE، قبل‌از بازتولید مشکل، گزارش تجسس Bluetooth HCI را در «گزینه‌های توسعه‌دهندگان» (تنظیمات > گزینه‌های توسعه‌دهندگان > فعال کردن گزارش تجسس Bluetooth HCI) فعال کنید.
  • راه‌اندازی پیش‌آزمون: قبل‌از اجرای آزمون، مراحل فعال کردن پرچم‌های اشکال‌زدایی پرجزئیات را دنبال کنید تا ویژگی‌های اشکال‌زدایی پرجزئیات در دستگاهتان فعال شود.
  • ضبط گزارش اشکال: پس‌از اجرای آزمایش و بازتولید مشکل، فرمان زیر را اجرا کنید تا بایگانی کامل گزارش اشکال تولید شود:
    adb -s $phoneid bugreport ./android-bugreport_$(date +%Y%m%d%H%M%S).zip
  • اطلاعات اشکال‌زدایی پیشرفته: فایل android-bugreport_YYYYMMDDmmss.zip تولیدشده حاوی داده‌های جامع عیب‌یابی در سطح سیستم است (ازجمله تخلیه کامل سیستم، آمار حافظه، عیب‌یابی باتری، و ردیابی‌های زیرسیستم سطح پایین) که اطلاعات پیشرفته‌تری برای اشکال‌زدایی ارائه می‌دهد.

گزارش‌های دستگاه کانون پخش محتوا

بااستفاده از این روش می‌توانید گزارش‌های دستگاه را برای هاب Google Nest خود مشاهده کنید. این روش برای مدل‌های زیر پشتیبانی می‌شود:

  • Google Home
  • Google Nest Audio
  • Google Nest Hub
  • Google Nest Mini

برای فعال کردن کانون Cast برای بازیابی گزارش‌های محلی:

  1. راه‌اندازی کردن «پل اشکال‌زدایی Android».
  2. نشانی IP هاب را دریافت کنید:

    • از کانون، اگر صفحه‌نمایش دارد:
      1. از بالای صفحه‌نمایش تند به‌پایین بکشید
      2. روی نماد «تنظیمات» تک‌ضرب بزنید
      3. نشانی IP دستگاه را پیدا کنید: در Nest Hub (2nd gen)، به اطلاعات دستگاه > اطلاعات فنی > نشانی IP بروید
    • از GHA در تلفن:
      1. روی دستگاه تک‌ضرب بزنید تا صفحه جزئیات دستگاه نشان داده شود
      2. روی نماد «تنظیمات» تک‌ضرب بزنید تا صفحه تنظیمات باز شود
      3. نشانی IP دستگاه را پیدا کنید: به اطلاعات دستگاه > اطلاعات فنی > نشانی IP بروید
  3. در رایانه‌ای که به همان شبکه Wi-Fi دستگاه متصل است:

      adb connect ip-address
      adb logcat
    

  4. برای ارائه گزارش‌ها به فردی، عملیاتی را که ناموفق است انجام دهید و خروجی را به فایل نوشتاری منتقل کنید:

      adb logcat -d > platform-logs.txt
    

خودکارسازی‌ها

تشخیص لبه

خودکارسازی‌ها در بوم‌سازگان Google Home دارای ویژگی تشخیص لبه هستند که منطقی است که تأیید می‌کند آغازگر فقط زمانی فعال می‌شود که تغییر وضعیت واقعی وجود داشته باشد، برخلاف به‌روزرسانی وضعیت که صرفاً وضعیت قبلی دستگاه را تکرار می‌کند.

برای مثال، اگر روشن کردن چراغ یک آغازگر باشد، تشخیص لبه تأیید می‌کند که آغازگر فقط درصورتی فعال می‌شود که آن دستگاه روشنایی از حالت خاموش به روشن تغییر کند، نه از حالت روشن به روشن (بدون تغییر).

خودکارسازی طبق انتظار عمل نمی‌کند

پس‌از درنظر گرفتن تشخیص لبه، اگر خودکارسازی طبق انتظار عمل نکرد:

  1. هر دستگاه را بررسی کنید تا مطمئن شوید که به‌درستی و مستقل از خودکارسازی شما کار می‌کند.

  2. نمودار خودکارسازی را برای خودکارسازی‌تان بررسی کنید و آن را با DSL خودکارسازی‌تان مقایسه کنید تا هرگونه فرض نادرست احتمالی ازجانب شما آشکار شود.

  3. درطول اجرای خودکارسازی، وضعیت دستگاه را در برنامه Google Home مشاهده کنید.

  4. بررسی کنید تا مطمئن شوید همه دستگاه‌های ارجاع‌شده توسط خودکارسازی در ساختاری که انتظار دارید باشند وجود دارند. حذف دستگاهی که خودکارسازی به آن وابسته است می‌تواند عواقب ناخواسته‌ای داشته باشد. تأثیر حذف دستگاه بر خودکارسازی‌ها را ببینید.

خودکارسازی زمانی اجرا می‌شود که نباید اجرا شود

اگر خودکارسازی شما زمانی اجرا می‌شود که نباید اجرا شود، معیارهای شروع‌کننده را بررسی کنید. ممکن است لازم باشد منطق بیشتری اضافه کنید تا مطمئن شوید که تغییر در وضعیت فقط یک‌بار ثبت می‌شود و خودکارسازی را فقط یک‌بار راه‌اندازی می‌کند.

خودکارسازی کامپایل نمی‌شود

مطمئن شوید برنامه‌تان حاوی همه واردات لازم باشد، ازجمله هر کلاس مربوط به انواع مختلف گره و همچنین ویژگی‌هایی که به آن‌ها ارجاع می‌دهید.

اعتبارسنجی ساخت خودکارسازی ناموفق بود

اگر ایجاد خودکارسازی از اعتبارسنجی عبور نکند، پیام هشدار یا خطا اطلاعاتی درباره مشکل ارائه می‌دهد. برای اطلاعات بیشتر، به مرجع ValidationIssueType مراجعه کنید.

تابع فهرست استثناهایی را ایجاد می‌کند

هنگام فراخوانی تابع Automation API List، ممکن است گرداننده‌های خواندن به‌دلیل نبود ویژگی‌های API استثناهایی را ایجاد کنند. برای کاهش این مشکل، خودکارسازی تحت‌تأثیرقرارگرفته را حذف کنید.

برای انجام این کار:

  1. بررسی کنید که adb نصب شده باشد. به نصب adb مراجعه کنید.
  2. شناسه خودکارسازی را با فراخوانی زیر از گزارش‌های Android بازیابی کنید:

    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"
    ...

    اگر لازم است چند شناسه خودکارسازی حذف شود، می‌توانید از ورق‌زن پایانه برای کنترل برونداد استفاده کنید:

    adb logcat -s GhpNative level:debug | less
  3. حذف خودکارسازی بااستفاده از شناسه خودکارسازی:

    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

شناسه ویژگی home.matter.6006.clusters.fc43 است که با RelativeHumidityControl مطابقت دارد. برای تعیین نام ویژگی از شناسه، نمایه ویژگی را ببینید.

از این مثال، RelativeHumidityControl باید درطول مقداردهی اولیه برنامه ثبت شود. برای افزودن ویژگی‌تان به دفتر ثبت، به ثبت ویژگی‌ها مراجعه کنید.

OAuth

اگر کارخواه OAuth موجود دارید

اگر ازقبل کارخواه OAuth درستی‌سنجی‌شده‌ای برای برنامه منتشرشده دارید، می‌توانید از کارخواه OAuth موجودتان برای آزمایش Home API استفاده کنید.

برای آزمایش و استفاده از Home API، ثبت‌نام Google Home Developer Console لازم نیست. بااین‌حال، برای انتشار برنامه‌تان همچنان به ثبت تأییدشده Developer Console نیاز دارید، حتی اگر کارخواه OAuth درستی‌سنجی‌شده‌ای از ادغام دیگری داشته باشید.

ملاحظات زیر اعمال می‌شود:

  • هنگام استفاده از کارخواه OAuth موجود، محدودیت ۱۰۰ کاربر وجود دارد. برای کسب اطلاعات درباره افزودن کاربران آزمایشی، به صفحه کسب رضایت OAuth را راه‌اندازی کنید. مستقل از درستی‌سنجی OAuth، محدودیتی ازسوی Home APIs اعمال می‌شود که فقط ۱۰۰ کاربر می‌توانند به برنامه شما اجازه اعطا کنند. این محدودیت پس‌از تکمیل ثبت‌نام Developer Console برداشته می‌شود.

  • Developer Console ثبت‌نام باید زمانی برای تأیید ارسال شود که آماده باشید اعطای دسترسی به نوع دستگاه را ازطریق OAuth محدود کنید تا برای به‌روزرسانی برنامه‌تان با Home API آماده شوید.

برای Google Cloud برنامه‌ای که هنوز درستی‌سنجی OAuth آن‌ها معلق است، کاربران نمی‌توانند جریان OAuth را تا زمانی که درستی‌سنجی تکمیل شود کامل کنند. تلاش برای اعطای اجازه‌ها با خطای زیر ناموفق خواهد بود:

Access blocked: <Project Name> has not completed the Google verification process.