जब Android 16 (या इससे ऊपर के वर्शन) वाला कोई डिवाइस बूट होता है, तो उसे ट्रेड-इन मोड में डाल दिया जाता है. इससे adb का इस्तेमाल करके डिवाइस से कनेक्ट किया जा सकता है. साथ ही, डिवाइस के बारे में जानकारी पाने के लिए किसी कमांड का इस्तेमाल किया जा सकता है. डिवाइस को ट्रेड-इन मोड में लाने के लिए, ये शर्तें पूरी होनी चाहिए:
- डिवाइस को फ़ैक्ट्री रीसेट करना ज़रूरी है.
- डिवाइस में मोबाइल सेवा नहीं होनी चाहिए.
- डिवाइस में कनेक्टिविटी या खाता सेट अप नहीं होना चाहिए.
- डिवाइस में ऐसा बिल्ड होना चाहिए जिसे डीबग न किया जा सके.
ट्रेड-इन मोड में, डाइग्नोस्टिक की सामान्य जानकारी के बारे में क्वेरी की जा सकती है. इसके अलावा, इवैलुएशन मोड में जाकर, adb के सभी कमांड इस्तेमाल किए जा सकते हैं. साथ ही, डिवाइस पर डाइग्नोस्टिक की अतिरिक्त प्रोसेस चलाई जा सकती है.
सामान्य स्वास्थ्य की जानकारी इकट्ठा करना
अपने डिवाइस की सामान्य सेहत की जानकारी इकट्ठा करने के लिए, यह तरीका अपनाएं. जैसे, बैटरी, स्टोरेज की परफ़ॉर्मेंस, और इंटरनैशनल मोबाइल इक्विपमेंट आइडेंटिटी (आईएमईआई) नंबर के बारे में जानकारी:
पक्का करें कि आपका डिवाइस, ट्रेड-इन मोड की ज़रूरी शर्तें पूरी करता हो.
डिवाइस को वर्कस्टेशन से कनेक्ट करें.
वर्कस्टेशन से, यह कमांड चलाएं:
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 OS की स्थिति की पहचान करना
Android ऑपरेटिंग सिस्टम की स्थिति के बारे में जानकारी इकट्ठा करने के लिए, यह तरीका अपनाएं. जैसे, यह पता लगाना कि यह एक मंज़ूर किया गया बिल्ड है या नहीं:
- डिवाइस को वर्कस्टेशन से कनेक्ट करें.
- पक्का करें कि डिवाइस इंटरनेट से कनेक्ट हो.
वर्कस्टेशन से, यह कमांड चलाएं:
adb shell tradeinmode getstatus --challenge CHALLENGE
CHALLENGE, वर्णों और अंकों से मिलकर बनी ऐसी स्ट्रिंग होती है जिसे बिना किसी क्रम के जनरेट किया जाता है. जैसे, CHALLENGE.
p4tRsuHjWB
यह निर्देश, JSON दिखाता है. इसमें एक अटेस्टेशन फ़ील्ड शामिल होता है. इसमें base64 अटेस्टेशन रिकॉर्ड होता है.यह कमांड,
getstatus
कमांड से मिली जानकारी में पुष्टि करने से जुड़ी जानकारी जोड़ती है. अटेस्टेशन की जानकारी इस तरह दिखती है:"attestation": { "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+otCPK4VjmSjyYw ... }
Android 16 या इसके बाद के वर्शन के साथ लॉन्च होने वाले डिवाइसों में, पुष्टि करने का रिकॉर्ड बनाने के लिए इंटरनेट कनेक्शन होना ज़रूरी है. अटेस्टेशन, कनेक्शन कॉन्फ़िगर करने के बाद, जांच करने वाले मोड में किया जाना चाहिए. सेटअप विज़र्ड में अटेस्टेशन करने पर, यह काम नहीं करता.
अटेस्टेशन की जानकारी को पार्स करने के लिए, इनमें से किसी एक तरीके का इस्तेमाल करें:
- AOSP बनाते समय बनाए गए
parse_tim_attestation
टूल का इस्तेमाल करें. - Android Key Attestation Library का इस्तेमाल करें.
उदाहरण के लिए,
parse_tim_attestation
टूल का इस्तेमाल करने के लिए, यह कमांड चलाएं:parse_tim_attestation --challenge CHALLENGE output_file
CHALLENGE वही होना चाहिए जिसका इस्तेमाल आपने पुष्टि से जुड़ी जानकारी पाने के लिए किया था.
अगर आपने दूसरे चरण के आउटपुट को output_file में सेव किया है, तो उस फ़ाइल का नाम दिया जा सकता है. ऐसा न होने पर, पुष्टि करने से जुड़ी जानकारी को stdin से पढ़ा जाता है.
Android OS की जानकारी देने वाला JSON ऑब्जेक्ट दिखता है:
"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
के बराबर है, तो ऑपरेटिंग सिस्टम को भरोसेमंद माना जाता है. साथ ही, बिल्ड पर हस्ताक्षर किया जाता है और आईएमईआई फ़र्ज़ी नहीं होता.ध्यान दें कि डिवाइस और होस्ट, दोनों पर पुष्टि करने के लिए इंटरनेट कनेक्शन होना ज़रूरी है.
- AOSP बनाते समय बनाए गए
ट्रेड-इन मोड की जांच करना
डेवलपमेंट के दौरान, आपको अपने डिवाइस की जांच करनी चाहिए. इससे यह पक्का किया जा सकेगा कि आपका डिवाइस, ट्रेड-इन मोड में सही तरीके से चालू और बंद हो रहा है. अपने डिवाइस पर ट्रेड-इन मोड चालू और बंद करने की सुविधा की जांच करने के लिए, यह तरीका अपनाएं:
डिवाइस को वर्कस्टेशन से कनेक्ट करें.
वर्कस्टेशन से, डिवाइस को ट्रेड-इन मोड में रीबूट करें:
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
बिल्ड हैं. user
बिल्ड में ro=debuggable=1
सेट होना चाहिए.
टेस्टिंग की स्थिति
adb shell tradeinmode testing status
इस कुकी से पता चलता है कि ट्रेड-इन मोड की टेस्टिंग चालू है या नहीं.
यह निर्देश सिर्फ़ उन डिवाइसों पर काम करता है जिनमें userdebug
, eng
या user
बिल्ड हैं. user
बिल्ड में ro=debuggable=1
सेट होना चाहिए.
testing stop
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
सेट होना चाहिए.
wait-until-ready
adb shell tradeinmode wait-until-ready
यह कुकी, सिस्टम की सेवाओं के तैयार होने तक इंतज़ार करती है, ताकि ट्रेड-इन मोड पूरी तरह से काम कर सके. ट्रेड-इन मोड के निर्देशों के सही तरीके से काम करने के लिए, इस निर्देश का इस्तेमाल अपने ऑटोमेशन में करें.
ट्रेड-इन मोड से जुड़ी अन्य कमांड से पहले, wait-until-ready
जोड़ा जा सकता है. उदाहरण के लिए, यहां wait-until-ready
को getstatus
से जोड़ा गया है:
adb shell tradeinmode wait-until-ready getstatus