عیب یابی

نمونه برنامه

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

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

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

نصب adb

اگر هنوز Android Debug Bridge را روی دستگاه محلی خود راه‌اندازی نکرده‌اید، مراحل زیر را دنبال کنید:

  1. "adb" را روی رایانه خود نصب کنید .
  2. گزینه‌های توسعه‌دهنده (Developer Options) و اشکال‌زدایی USB را در گوشی Android خود فعال کنید .

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

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

اطلاعات نسخه

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

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

جمع‌آوری لاگ‌های اندروید بر اساس اسکریپت‌ها

برای ثبت گزارش‌های زنده دستگاه اندروید در طول یک جلسه اشکال‌زدایی:

  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. پس از اتمام، با فشار دادن Ctrl+C (یا Cmd+C در مک) فرآیند logcat را در ترمینال متوقف کنید.
  7. گزارش‌های این جلسه در android-logs_YYYYMMDDmmss.txt ذخیره می‌شوند. فایل android-logs_YYYYMMDDmmss.txt و _versions.txt را به هر گزارش اشکالی پیوست کنید.

جمع‌آوری لاگ‌های اندروید توسط adb bugreport

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

  • راه‌اندازی Matter BLE: هنگام گزارش مشکل راه‌اندازی Matter در رابطه با BLE، قبل از تکرار مشکل، ورود به سیستم Bluetooth HCI snoop را در گزینه‌های توسعه‌دهندگان ( تنظیمات > گزینه‌های توسعه‌دهندگان > فعال کردن ورود به سیستم Bluetooth HCI snoop ) فعال کنید.
  • تنظیمات پیش از آزمون: قبل از اجرای آزمون، مراحل موجود در «فعال کردن پرچم‌های اشکال‌زدایی مفصل» را دنبال کنید تا ویژگی‌های اشکال‌زدایی مفصل را در دستگاه خود فعال کنید.
  • ثبت گزارش اشکال: پس از اجرای تست و ایجاد مجدد مشکل، دستور زیر را برای ایجاد یک آرشیو کامل گزارش اشکال اجرا کنید:
    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. پل اشکال‌زدایی اندروید را راه‌اندازی کنید .
  2. آدرس IP هاب خود را دریافت کنید:

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

      adb connect ip-address
      adb logcat
    

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

      adb logcat -d > platform-logs.txt
    

اتوماسیون‌ها

تشخیص لبه

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

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

اتوماسیون آنطور که انتظار می‌رود رفتار نمی‌کند

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

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

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

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

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

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

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

اتوماسیون کامپایل نمی‌شود

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

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

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

تابع لیست، استثنائات را ایجاد می‌کند

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

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

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

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

API دیسکاوری در صورت ثبت نشدن یک ویژگی، هشداری را ثبت می‌کند.

اگر API مربوط به Discovery هشداری برای 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 است. برای تعیین نام ویژگی از روی شناسه، به فهرست ویژگی‌ها (Trait index) مراجعه کنید.

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

اواوت

اگر یک کلاینت OAuth موجود دارید

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

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

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

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

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

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

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