عند تشغيل جهاز 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
يرصد الجهاز أنّ اختبار وضع المقايضة نشط.
الخروج من وضع إعادة البيع واستعادة إمكانية الوصول الكامل إلى adb:
adb shell tradeinmode testing stop
دمج معالج الإعداد المخصّص
لن يعمل الأمر evaluate
على الأجهزة التي تتضمّن معالجات إعداد مخصّصة
ما لم تتم إضافة جهاز استقبال بث. لإضافة جهاز استقبال للبث إلى تطبيق معالج الإعداد المخصّص:
يمكنك تحديد مستلِم في بيان التطبيقات باتّباع الخطوات التالية:
<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>
أنشئ جهاز استقبال للبث مشابهًا لما يلي:
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. } }
على المستلِم تنفيذ الإجراءات التالية بالترتيب.
- تأكَّد من أنّ
persist.adb.tradeinmode
هو2
. - تأكَّد من عدم تفعيل ميزة "الحماية عند إعادة الضبط على الإعدادات الأصلية" أو أقفال مكافحة السرقة.
- وفِّر الجهاز، مع التأكّد من أنّ
Settings.Secure.USER_SETUP_COMPLETE
وSettings.Global.DEVICE_PROVISIONED
1
. - أغلِق نشاط معالج الإعداد حتى يظهر الجهاز على الشاشة الرئيسية.
مرجع وضع إعادة البيع
يوضّح هذا القسم جميع أوامر وضع المقايضة.
تقييم
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