عند تشغيل جهاز Android 16 (أو إصدار أحدث)، يتم وضعه في وضع الاستبدال، ما يتيح لك الاتصال بالجهاز باستخدام adb واستخدام أمر للحصول على معلومات حول الجهاز. يجب استيفاء الشروط المسبقة التالية لكي ينتقل الجهاز إلى وضع إعادة البيع:
- يجب إعادة ضبط الجهاز على الإعدادات الأصلية.
- يجب ألا يتضمّن الجهاز خدمة شبكة الجوّال.
- يجب ألا يكون الجهاز متصلاً بشبكة أو مرتبطًا بحساب.
- يجب أن يعمل الجهاز بإصدار غير قابل للتصحيح.
يتيح لك وضع "إعادة البيع" طلب معلومات التشخيص الأساسية أو تفعيل وضع التقييم الذي يتيح لك تنفيذ مجموعة كاملة من أوامر adb وإجراء عمليات تشخيص إضافية على الجهاز.
جمع معلومات عامة عن الصحة
لجمع معلومات عامة عن صحة جهازك، مثل معلومات حول البطارية وحالة التخزين وأرقام الهوية الدولية للأجهزة الجوّالة (IMEI)، اتّبِع الخطوات التالية:
تأكَّد من استيفاء جهازك للشروط المسبقة لوضع الاستبدال.
وصِّل الجهاز بمحطة عمل.
من محطة العمل، شغِّل الأمر التالي:
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، مثل ما إذا كان إصدارًا معتمَدًا، اتّبِع الخطوات التالية:
- وصِّل الجهاز بمحطة عمل.
- تأكَّد من اتصال الجهاز بالإنترنت.
من محطة العمل، شغِّل الأمر التالي:
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 أو الإصدارات الأحدث توفُّر اتصال بالإنترنت لإنشاء سجلّ إثبات صحة. يجب إجراء عملية التصديق في وضع التقييم بعد ضبط اتصال، لأنّها ستتعذّر إذا تم إجراؤها في معالج الإعداد.
حلِّل معلومات شهادة التصديق باستخدام إحدى الطرق التالية:
- استخدِم أداة
parse_tim_attestation
التي يتم إنشاؤها عند إنشاء AOSP. - استخدام مكتبة إثبات صحة مفتاح Android
على سبيل المثال، لاستخدام الأداة
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.يُرجى العِلم أنّه يجب توفُّر اتصال بالإنترنت لإجراء عملية إثبات صحة الجهاز، وذلك على كل من الجهاز والمضيف.
- استخدِم أداة
اختبار وضع إعادة البيع
أثناء عملية التطوير، يجب اختبار جهازك للتأكّد من أنّه يدخل إلى وضع الاستبدال ويخرج منه بشكل سليم. اتّبِع الخطوات التالية لاختبار قدرة جهازك على تفعيل وضع الاستبدال وإيقافه:
وصِّل الجهاز بمحطة عمل.
من محطة العمل، أعِد تشغيل الجهاز في وضع الاستبدال باتّباع الخطوات التالية:
adb shell tradeinmode testing start
تتم إعادة تشغيل الجهاز والدخول في وضع المقايضة. بعد الدخول إلى وضع الاستبدال، يمكنك استخدام أي أمر
adb shell tradein
.تأكَّد من تفعيل "وضع الاستبدال" باتّباع الخطوات التالية:
adb shell tradeinmode testing status
يتعرّف الجهاز على أنّ اختبار وضع الاستبدال نشط.
الخروج من وضع إعادة البيع واستعادة إذن الوصول الكامل إلى تصحيح أخطاء Android:
adb shell tradeinmode testing stop
دمج معالج الإعداد المخصّص
لن يعمل الأمر evaluate
على الأجهزة التي تتضمّن معالجات إعداد مخصّصة
إلا إذا تمت إضافة أداة استقبال البث. لإضافة أداة استقبال البث إلى تطبيق معالج الإعداد المخصّص، اتّبِع الخطوات التالية:
عليك تعريف أداة استقبال في بيان التطبيقات:
<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>a
tegory.DEFAULT" / /intent-filter /receiverأنشئ أداة استقبال بث مشابهة لما يلي:
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 activ
ity. } }
على جهاز الاستقبال تنفيذ الإجراءات التالية بالترتيب.
- تأكَّد من أنّ
persist.adb.tradeinmode
هو2
. - تأكَّد من عدم توفّر أي أقفال للحماية عند إعادة الضبط على الإعدادات الأصلية أو أقفال لمكافحة السرقة.
- وفِّر المتطلبات اللازمة للجهاز، مع التأكّد من أنّ
Settings.Secure.USER_SETUP_COMPLETE
وSettings.Global.DEVICE_PROVISIONED
1
. - أغلِق نشاط معالج الإعداد ليعود الجهاز إلى الشاشة الرئيسية.
مرجع وضع إعادة البيع
يوضّح هذا القسم جميع الأوامر المتعلّقة بوضع الاستبدال.
تقييم
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