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

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",
      "cameras": [
        {
          "num_physical": 3,
          "lens_facing": "back"
        },
        {
          "num_physical": 2,
          "lens_facing": "front"
        }
      ],
      "uiccs": [
        {
          "eid": "89033023427100000000007982221521",
          "removable": false,
          "physical_slot_index": 0
        },
        {
          "removable": true,
          "physical_slot_index": 1
        }
      ]
    }
    

    अगर factory_reset_protection को true पर सेट किया गया है, तो डिवाइस सुरक्षित है और इसे रीसेट नहीं किया जा सकता. अगर डिवाइस को रीसेट नहीं किया जा सकता, तो उसकी जांच नहीं की जा सकती.

    cameras और uiccs फ़ील्ड, Android 17 या इसके बाद के वर्शन में मौजूद होते हैं.

Android OS की स्थिति की पहचान करना

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
        ...
    }
    

    Android 16 या इसके बाद के वर्शन के साथ लॉन्च किए गए डिवाइसों को अटेस्टेशन रिकॉर्ड बनाने के लिए, इंटरनेट कनेक्टिविटी की ज़रूरत होती है. अटेस्टेशन, इवैल्युएशन मोड में किया जाना चाहिए. साथ ही, कनेक्शन कॉन्फ़िगर करने के बाद ही अटेस्टेशन किया जाना चाहिए. ऐसा इसलिए, क्योंकि सेटअप विज़र्ड में अटेस्टेशन करने पर, यह प्रोसेस पूरी नहीं हो पाती.

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

    उदाहरण के लिए, 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. सेटअप विज़र्ड की गतिविधि को बंद करें, ताकि डिवाइस होम स्क्रीन पर आ जाए.

ट्रेड-इन मोड के लिए रेफ़रंस

इस सेक्शन में, ट्रेड-इन मोड के सभी कमांड के बारे में बताया गया है.

evaluate

adb shell tradeinmode evaluate

यह कमांड, सेटअप विज़र्ड को स्किप करके डिवाइस को इवैल्युएशन मोड में ले जाता है. ऐसा माना जाता है कि उपयोगकर्ता ने सेटअप की हर स्क्रीन को मैन्युअल तरीके से स्किप किया है.

सेटअप विज़र्ड को स्किप करने के बाद, डिवाइस पर ADB के अतिरिक्त कमांड या फ़ंक्शनल टेस्ट चलाए जा सकते हैं.

इवैल्युएशन मोड से बाहर निकलने के बाद, डिवाइस को फ़ैक्ट्री रीसेट किया जाता है. ऐसा इसलिए किया जाता है, ताकि जांच के दौरान जनरेट हुआ कोई भी डेटा गलती से किसी ग्राहक को ट्रांसफ़र न हो.

getstatus

adb shell tradeinmode getstatus [--challenge CHALLENGE]

इस कमांड से, डिवाइस के सिस्टम की जानकारी वाली JSON स्ट्रिंग मिलती है. इसमें, बैटरी और स्टोरेज की परफ़ॉर्मेंस की जानकारी भी शामिल होती है.

अटेस्टेशन का अतिरिक्त फ़ील्ड पाने के लिए, --challenge पैरामीटर शामिल करें. इसके बाद, बिना किसी क्रम के जनरेट की गई अल्फ़ान्यूमेरिक चैलेंज कुंजी शामिल करें. ऑपरेटिंग सिस्टम की अहम जानकारी की पहचान करने के लिए, इस रिस्पॉन्स को पार्स करें. जैसे, बूटलोडर की स्थिति (लॉक या अनलॉक) और आईएमईआई सीरियल नंबर की वैधता.

poweroff

adb shell tradeinmode poweroff

इस कमांड से डिवाइस बंद हो जाता है. इस कमांड का इस्तेमाल तब करें, जब डिवाइस की जांच या उसका मूल्यांकन न किया जा रहा हो, ताकि बैटरी की खपत न हो.

reboot

adb shell tradeinmode reboot

इस कमांड से डिवाइस रीबूट हो जाता है.

testing start

adb shell tradeinmode testing start

इस कमांड से डिवाइस, ट्रेड-इन मोड में रीबूट हो जाता है. यह कमांड सिर्फ़ सेटअप विज़र्ड में काम करता है. यह कमांड देने पर, अनुमति की ज़रूरत नहीं होती. साथ ही, सिर्फ़ ट्रेड-इन मोड के कमांड काम करते हैं.

यह कमांड सिर्फ़ उन डिवाइसों पर काम करता है जिनमें userdebug, eng या user बिल्ड मौजूद हों. user बिल्ड में, ro=debuggable=1 सेट होना चाहिए.

testing status

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 सेट होना चाहिए.

testing wipe

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