اطلاعات سلامت سیستم را بدست آورید

هنگامی که یک دستگاه Android 16 (یا بالاتر) بوت می شود، در حالت تجارت قرار می گیرد که به شما امکان می دهد با استفاده از adb به دستگاه متصل شوید و از دستوری برای به دست آوردن اطلاعات در مورد دستگاه استفاده کنید. پیش شرط های زیر برای ورود دستگاه به حالت تجارت در باید وجود داشته باشد:

  • دستگاه باید به حالت کارخانه بازنشانی شود.
  • دستگاه نباید سرویس تلفن همراه داشته باشد.
  • دستگاه نباید اتصال داشته باشد یا حسابی ایجاد شده باشد.
  • دستگاه باید دارای یک ساختار غیرقابل رفع اشکال باشد.

پس از پیمایش از طریق جادوگر راه اندازی، دستگاه در حالت ارزیابی قرار می گیرد که به شما امکان می دهد طیف کاملی از دستورات adb را انجام دهید و عیب یابی اضافی را روی دستگاه اجرا کنید.

اطلاعات عمومی سلامت را جمع آوری کنید

برای جمع‌آوری اطلاعات کلی سلامت دستگاه خود، مانند اطلاعات مربوط به باتری، سلامت حافظه و شماره‌های هویت بین‌المللی تجهیزات تلفن همراه (IMEI)، این مراحل را دنبال کنید:

  1. مطمئن شوید که دستگاه شما پیش‌شرط‌های حالت تجارت را برآورده می‌کند.

  2. دستگاه را به یک ایستگاه کاری وصل کنید.

  3. از ایستگاه کاری، دستور زیر را اجرا کنید:

    adb shell tradeinmode getstatus

    این دستور یک شی JSON را با اطلاعات مربوط به دستگاه برمی گرداند. نمونه زیر خروجی پیکسل 7 است:

    {
      "battery": {
        "cycle_count": 16,
        "health": 100,
        "state": 2,
        "manufacturing_date": 1653004800,
        "first_usage_date": 0
      },
      "storage": {
        "useful_lifetime_remaining": 99,
        "capacity_bytes": "128000000000"
      },
      "launch_level": 33,
      "locks": {
        "factory_reset_protection": false
      },
      "product": {
        "brand": "google",
        "device": "panther",
        "manufacturer": "Google",
        "model": "Pixel 7",
        "name": "panther"
      },
      "imeis": [
        "353644930127905",
        "353644930127913"
      ],
      "serial": "26061FDH2000AP"
    }
    

    اگر factory_reset_protection روی true تنظیم شده باشد، دستگاه امن است و قابل بازنشانی نیست. اگر دستگاه قابل تنظیم مجدد نباشد، نمی توان آن را ارزیابی کرد.

وضعیت سیستم عامل اندروید را شناسایی کنید

برای جمع‌آوری اطلاعات درباره وضعیت سیستم‌عامل اندروید، از جمله اینکه آیا این سیستم‌عامل تایید شده است، این مراحل را دنبال کنید:

  1. دستگاه را به یک ایستگاه کاری وصل کنید.
  2. مطمئن شوید که دستگاه به اینترنت متصل است.
  3. از ایستگاه کاری، دستور زیر را اجرا کنید:

    adb shell tradeinmode getstatus --challenge CHALLENGE

    CHALLENGE یک رشته الفبایی عددی تصادفی است، مانند p4tRsuHjWB . این دستور JSON را شامل یک فیلد گواهی حاوی یک رکورد گواهی base64 برمی گرداند.

    این دستور اطلاعات تصدیق را به اطلاعات بازگردانده شده توسط دستور getstatus اضافه می کند. اطلاعات گواهی به صورت زیر است:

    "attestation": {
      "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n
        EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n
        MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n
        KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+otCPK4VjmSjyYw
        ...
    }
    

    دستگاه‌هایی که با Android 16 یا بالاتر راه‌اندازی می‌شوند، برای ایجاد یک سابقه تأیید نیاز به اتصال اینترنت دارند. تصدیق باید در حالت ارزیابی، پس از پیکربندی اتصال انجام شود، زیرا اگر در جادوگر راه اندازی انجام شود، با شکست مواجه می شود.

  4. اطلاعات گواهی را با استفاده از یکی از روش های زیر تجزیه کنید:

    به عنوان مثال، برای استفاده از ابزار parse_tim_attestation ، اجرا کنید:

    parse_tim_attestation --challenge CHALLENGE output_file

    CHALLENGE باید همان چالشی باشد که برای به دست آوردن اطلاعات گواهی استفاده کردید.

    اگر خروجی مرحله 2 را در یک output_file ذخیره کرده اید، می توانید نام فایل را وارد کنید. در غیر این صورت، اطلاعات گواهی از stdin خوانده می شود.

    یک شی JSON با اطلاعات سیستم عامل Android برگردانده می شود:

    "record": {
      "keymaster_version": "400",
      "keymaster_security_level": "TRUSTED_ENVIRONMENT",
      "attributes": {
        "imeis": [
          "353644930125669",
          "353644930125677"
        ],
        "vendor_patch_level": 20250305,
        "serial": "26161FDH2000NV",
        "os_version": 160000,
        "source": "hardware",
        "boot_patch_level": 20250305
      },
      "bootloader_locked": false,
      "verified_boot": false,
      "security_level": "TRUSTED_ENVIRONMENT"
    },
    "certificate": "verified",
    "trustworthy": "verified boot disabled"
    

    اگر trustworthy برابر با yes باشد، سیستم عامل قابل اعتماد در نظر گرفته می شود. ساخت امضا شده است و IMEI جعلی نیست.

    توجه داشته باشید که اتصال به اینترنت برای انجام تأیید، هم در دستگاه و هم در هاست مورد نیاز است.

حالت معامله را آزمایش کنید

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

  1. دستگاه را به یک ایستگاه کاری وصل کنید.

  2. از ایستگاه کاری، دستگاه را به حالت تجارت در راه اندازی مجدد کنید:

    adb shell tradeinmode testing start

    دستگاه ریبوت شده و وارد حالت تجارت در می شود. پس از وارد شدن به حالت تجارت، می توانید از هر دستور adb shell tradein استفاده کنید.

  3. اطمینان حاصل کنید که حالت تجارت در فعال است:

    adb shell tradeinmode testing status

    دستگاه مشخص می کند که تست حالت تجارت در فعال است.

  4. از حالت تجارت خارج شوید و دسترسی کامل adb را بازیابی کنید:

    adb shell tradeinmode testing stop

ادغام جادوگر تنظیمات سفارشی

فرمان evaluate روی دستگاه‌هایی با جادوگرهای تنظیم سفارشی کار نمی‌کند مگر اینکه یک گیرنده پخش اضافه شود. برای افزودن یک گیرنده پخش به برنامه جادوگر تنظیم سفارشی:

  1. یک گیرنده را در مانیفست برنامه ها اعلام کنید:

    <receiver android:name=".EnterEvaluationModeReceiver"
              android:exported="true"
              android:permission="android.permission.ENTER_TRADE_IN_MODE">
      <intent-filter>
        <action android:name="com.google.android.setupwizard.ENTER_TRADE_IN_MODE" />
        <category android:name="android.intent.category.DEFAULT" />
      </intent-filter>
    </receiver>
    
  2. یک گیرنده پخش مشابه ایجاد کنید:

    public class EnterEvaluationModeReceiver extends BroadcastReceiver {
      private static final String TRADE_IN_MODE_PROPERTY = "persist.adb.tradeinmode";
      private static final int TIM_EVALUATION_MODE = 2;
    
      @Override
      public void onReceive(Context context, Intent intent) {
        if (SystemProperties.getInt(TRADE_IN_MODE_PROPERTY, 0) != TIM_EVALUATION_MODE) {
          return;
        }
    
        // Check if any factory reset protection is enabled.
        // Provision the device.
        // End the setup wizard activity.
     }
    }
    

گیرنده باید اقدامات زیر را به ترتیب انجام دهد.

  1. بررسی کنید که persist.adb.tradeinmode 2 باشد.
  2. بررسی کنید که محافظ تنظیم مجدد کارخانه یا قفل ضد سرقت وجود نداشته باشد.
  3. دستگاه را تهیه کنید و مطمئن شوید که Settings.Secure.USER_SETUP_COMPLETE و Settings.Global.DEVICE_PROVISIONED 1 هستند.
  4. فعالیت جادوگر راه اندازی را رد کنید تا دستگاه در صفحه اصلی باشد.

مرجع تجارت در حالت

این بخش تمام دستورات تجارت در حالت را توضیح می دهد.

ارزیابی کنید

adb shell tradeinmode evaluate

با پرش از جادوگر راه‌اندازی وارد حالت ارزیابی می‌شود، گویی هر صفحه تنظیمات به‌صورت دستی توسط کاربر رد شده است.

پس از پرش از جادوگر راه اندازی، می توانید دستورات ADB اضافی یا تست های عملکردی را روی دستگاه اجرا کنید.

پس از خروج از حالت ارزیابی، بازنشانی کارخانه ای انجام می شود تا اطمینان حاصل شود که هیچ مصنوع از آزمایش به طور تصادفی به هیچ مشتری منتقل نمی شود.

وضعیت گرفتن

adb shell tradeinmode getstatus [--challenge CHALLENGE]

یک رشته JSON با اطلاعات سیستم، از جمله اطلاعات سلامت باتری و ذخیره سازی، را برای دستگاه برمی گرداند.

شامل پارامتر --challenge و به دنبال آن یک کلید چالش الفبایی عددی ایجاد شده به صورت تصادفی برای بازگرداندن یک فیلد گواهی اضافی است. برای شناسایی اطلاعات کلیدی سیستم عامل، مانند وضعیت بوت لودر (قفل یا باز) و اعتبار شماره سریال IMEI، این پاسخ را تجزیه کنید.

poweroff

adb shell tradeinmode poweroff

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

راه اندازی مجدد

adb shell tradeinmode reboot

دستگاه را دوباره راه اندازی می کند.

شروع تست

adb shell tradeinmode testing start

دستگاه را به حالت تجارت در راه اندازی مجدد می کند. این دستور فقط در ویزارد راه اندازی کار می کند. با صدور این دستور، مجوز دور زده می شود و فقط دستورات حالت تجارت کار می کنند.

این دستور فقط روی دستگاه‌هایی با userdebug ، eng یا ساخت‌های user کار می‌کند. ساخت user باید ro=debuggable=1 مجموعه داشته باشد.

وضعیت تست

adb shell tradeinmode testing status

مشخص می کند که آیا تست حالت تجارت در فعال است یا خیر.

این دستور فقط روی دستگاه‌هایی با userdebug ، eng یا ساخت‌های user کار می‌کند. ساخت user باید ro=debuggable=1 مجموعه داشته باشد.

توقف تست

adb shell tradeinmode testing stop

قبل از صدور دستور adb shell tradeinmode testing start دستگاه را به هر حالتی که در آن بود برمی‌گرداند.

این دستور فقط روی دستگاه‌هایی با userdebug ، eng یا ساخت‌های user کار می‌کند. ساخت user باید ro=debuggable=1 مجموعه داشته باشد.

پاک کردن تست

adb shell tradeinmode testing wipe

دستگاه را به تنظیمات کارخانه بازنشانی می کند.

این دستور فقط روی دستگاه‌هایی با userdebug ، eng یا ساخت‌های user کار می‌کند. ساخت user باید ro=debuggable=1 مجموعه داشته باشد.

صبر کنید تا آماده شود

adb shell tradeinmode wait-until-ready

منتظر می‌ماند تا سرویس‌های سیستم آماده شوند تا حالت تجارت به طور کامل کار کند. از این دستور در اتوماسیون خود برای اطمینان از موفقیت آمیز بودن دستورات حالت تجارت استفاده کنید.

می‌توانید قبل از سایر دستورات حالت معامله، wait-until-ready اضافه کنید. به عنوان مثال، در اینجا wait-until-ready chained to getstatus است:

adb shell tradeinmode wait-until-ready getstatus