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

عند تشغيل جهاز 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. الخروج من وضع إعادة البيع واستعادة إذن الوصول الكامل إلى تصحيح أخطاء Android:

    adb shell tradeinmode testing stop

دمج معالج الإعداد المخصّص

لن يعمل الأمر evaluate على الأجهزة التي تتضمّن معالجات إعداد مخصّصة إلا إذا تمت إضافة أداة استقبال البث. لإضافة أداة استقبال البث إلى تطبيق معالج الإعداد المخصّص، اتّبِع الخطوات التالية:

  1. عليك تعريف أداة استقبال في بيان التطبيقات:

    <receiver android:name=".EnterEvaluationModeReceiver"
              android:exported="true"
              android:permission="android.permis>sio<n.ENTER_TRADE>_IN_M<ODE"
      intent-filter
        action android:name="com.google.android>.setu<pwizard.ENTER_TRADE_IN_MODE" /
        category android:>nam<e="androi>d<.intent.c>ategory.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

يدخل في وضع التقييم من خلال تخطّي معالج الإعداد كما لو أنّ المستخدم تخطّى كل شاشة إعداد يدويًا.

بعد تخطّي معالج الإعداد، يمكنك تنفيذ أوامر إضافية في "أداة تصحيح أخطاء Android" أو إجراء اختبارات وظيفية على الجهاز.

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

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