الحصول على معلومات عن حالة النظام

عند تشغيل جهاز Android 16 (أو إصدار أحدث)، يتم وضعه في وضع المقايضة، ما يتيح لك الاتصال بالجهاز باستخدام adb واستخدام أمر للحصول على معلومات عن الجهاز. يجب أن تكون الشروط الأساسية التالية مفعّلة لكي يدخل الجهاز في وضع إعادة البيع:

  • يجب إعادة ضبط الجهاز على الإعدادات الأصلية.
  • يجب ألا يتضمّن الجهاز خدمة شبكة الجوّال.
  • يجب ألا يكون الجهاز متصلاً بالإنترنت أو أن يكون قد تم إعداد حساب عليه.
  • يجب أن يعمل الجهاز بإصدار لا يمكن تصحيح أخطاءه.

بعد التنقّل في معالج الإعداد، يتم وضع الجهاز في وضع التقييم، ما يتيح لك تنفيذ مجموعة كاملة من أوامر adb وتشغيل بيانات تشخيص إضافية على الجهاز.

جمع معلومات عامة عن الصحة

لجمع معلومات عامة عن حالة جهازك، مثل معلومات عن البطارية وحالة مساحة التخزين وأرقام الهوية الدولية للأجهزة الجوّالة (IMEI)، اتّبِع الخطوات التالية:

  1. تأكَّد من استيفاء جهازك لمتطلبات وضع المقايضة.

  2. وصِّل الجهاز بمحطة عمل.

  3. من محطة العمل، شغِّل الأمر التالي:

    adb shell tradeinmode getstatus

    يعرض هذا الأمر عنصر JSON يحتوي على معلومات عن الجهاز. في ما يلي مثال على النتائج التي يتم عرضها على هاتف Pixel 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، يعني ذلك أنّ الجهاز آمن ولا يمكن إعادة ضبطه. إذا تعذّرت إعادة ضبط الجهاز، لا يمكن تقييمه.

تحديد حالة نظام التشغيل Android

لجمع معلومات عن حالة نظام التشغيل Android، مثل ما إذا كان إصدارًا موافَقًا عليه، اتّبِع الخطوات التالية:

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

    تتطلّب الأجهزة التي تعمل بالإصدار 16 من نظام التشغيل Android أو الإصدارات الأحدث الاتصال بالإنترنت لإنشاء سجلّ إثبات الهوية. يجب إجراء عملية الشهادة في وضع التقييم، بعد ضبط اتصال، لأنّها لا تنجح إذا تم إجراؤها في معالج الإعداد.

  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 إضافية أو اختبارات وظيفية على الجهاز.

بعد مغادرة وضع التقييم، تتم إعادة ضبط الجهاز على الإعدادات الأصلية لضمان عدم نقل أي مواد عرض من الاختبار عن طريق الخطأ إلى أي عملاء.

getstatus

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. يجب ضبط ro=debuggable=1 في الإصدار user.

حالة الاختبار

adb shell tradeinmode testing status

لتحديد ما إذا كان اختبار وضع المقايضة نشطًا

لا يعمل هذا الأمر إلا على الأجهزة التي تعمل بالإصدارات userdebug أو eng أو user. يجب ضبط ro=debuggable=1 في الإصدار user.

محطة الاختبار

adb shell tradeinmode testing stop

يعيد الجهاز إلى أي وضع كان عليه قبل إصدار الأمر adb shell tradeinmode testing start.

لا يعمل هذا الأمر إلا على الأجهزة التي تعمل بالإصدارات userdebug أو eng أو user. يجب ضبط ro=debuggable=1 في الإصدار user.

محو البيانات في مرحلة الاختبار

adb shell tradeinmode testing wipe

إعادة ضبط الجهاز على الإعدادات الأصلية

لا يعمل هذا الأمر إلا على الأجهزة التي تعمل بالإصدارات userdebug أو eng أو user. يجب ضبط ro=debuggable=1 في الإصدار user.

wait-until-ready

adb shell tradeinmode wait-until-ready

ينتظر إلى أن تصبح خدمات النظام جاهزة حتى يعمل وضع المقايضة بالكامل. استخدِم هذا الأمر ضمن عمليات التشغيل الآلي لضمان نجاح أوامر وضع المقايضة.

يمكنك إضافة wait-until-ready قبل أوامر وضع المقايضة الأخرى. على سبيل المثال، إليك wait-until-ready مرتبطًا بـ getstatus:

adb shell tradeinmode wait-until-ready getstatus