सिस्टम की परफ़ॉर्मेंस की जानकारी पाना

जब Android 16 (या इससे ऊपर के वर्शन) वाला कोई डिवाइस बूट होता है, तो उसे ट्रेड-इन मोड में डाल दिया जाता है. इससे adb का इस्तेमाल करके डिवाइस से कनेक्ट किया जा सकता है. साथ ही, डिवाइस के बारे में जानकारी पाने के लिए किसी कमांड का इस्तेमाल किया जा सकता है. डिवाइस को ट्रेड-इन मोड में लाने के लिए, ये शर्तें पूरी होनी चाहिए:

  • डिवाइस को फ़ैक्ट्री रीसेट करना ज़रूरी है.
  • डिवाइस में मोबाइल सेवा नहीं होनी चाहिए.
  • डिवाइस में कनेक्टिविटी या खाता सेट अप नहीं होना चाहिए.
  • डिवाइस में ऐसा बिल्ड होना चाहिए जिसे डीबग न किया जा सके.

ट्रेड-इन मोड में, डाइग्नोस्टिक की सामान्य जानकारी के बारे में क्वेरी की जा सकती है. इसके अलावा, इवैलुएशन मोड में जाकर, adb के सभी कमांड इस्तेमाल किए जा सकते हैं. साथ ही, डिवाइस पर डाइग्नोस्टिक की अतिरिक्त प्रोसेस चलाई जा सकती है.

सामान्य स्वास्थ्य की जानकारी इकट्ठा करना

अपने डिवाइस की सामान्य सेहत की जानकारी इकट्ठा करने के लिए, यह तरीका अपनाएं. जैसे, बैटरी, स्टोरेज की परफ़ॉर्मेंस, और इंटरनैशनल मोबाइल इक्विपमेंट आइडेंटिटी (आईएमईआई) नंबर के बारे में जानकारी:

  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 OS की स्थिति की पहचान करना

Android ऑपरेटिंग सिस्टम की स्थिति के बारे में जानकारी इकट्ठा करने के लिए, यह तरीका अपनाएं. जैसे, यह पता लगाना कि यह एक मंज़ूर किया गया बिल्ड है या नहीं:

  1. डिवाइस को वर्कस्टेशन से कनेक्ट करें.
  2. पक्का करें कि डिवाइस इंटरनेट से कनेक्ट हो.
  3. वर्कस्टेशन से, यह कमांड चलाएं:

    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 या इसके बाद के वर्शन के साथ लॉन्च होने वाले डिवाइसों में, पुष्टि करने का रिकॉर्ड बनाने के लिए इंटरनेट कनेक्शन होना ज़रूरी है. अटेस्टेशन, कनेक्शन कॉन्फ़िगर करने के बाद, जांच करने वाले मोड में किया जाना चाहिए. सेटअप विज़र्ड में अटेस्टेशन करने पर, यह काम नहीं करता.

  4. अटेस्टेशन की जानकारी को पार्स करने के लिए, इनमें से किसी एक तरीके का इस्तेमाल करें:

    • 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 के बराबर है, तो ऑपरेटिंग सिस्टम को भरोसेमंद माना जाता है. साथ ही, बिल्ड पर हस्ताक्षर किया जाता है और आईएमईआई फ़र्ज़ी नहीं होता.

    ध्यान दें कि डिवाइस और होस्ट, दोनों पर पुष्टि करने के लिए इंटरनेट कनेक्शन होना ज़रूरी है.

ट्रेड-इन मोड की जांच करना

डेवलपमेंट के दौरान, आपको अपने डिवाइस की जांच करनी चाहिए. इससे यह पक्का किया जा सकेगा कि आपका डिवाइस, ट्रेड-इन मोड में सही तरीके से चालू और बंद हो रहा है. अपने डिवाइस पर ट्रेड-इन मोड चालू और बंद करने की सुविधा की जांच करने के लिए, यह तरीका अपनाएं:

  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 बिल्ड हैं. 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