Uzyskiwanie informacji o stanie systemu

Gdy urządzenie z Androidem 16 (lub nowszym) uruchamia się, przechodzi w tryb wymiany za dopłatą, który umożliwia połączenie się z urządzeniem za pomocą adb i użycie polecenia do uzyskania informacji o urządzeniu. Aby urządzenie mogło przejść w tryb wymiany za dopłatą, muszą być spełnione te warunki wstępne:

  • Urządzenie musi zostać przywrócone do ustawień fabrycznych.
  • Urządzenie nie może mieć usługi komórkowej.
  • Urządzenie nie może mieć połączenia ani skonfigurowanego konta.
  • Na urządzeniu musi być uruchomiona kompilacja, której nie można debugować.

Tryb wymiany za dopłatą umożliwia wysyłanie zapytań o podstawowe informacje diagnostyczne lub przejście w tryb oceny, który umożliwia wykonywanie pełnego zakresu poleceń adb i przeprowadzanie dodatkowych testów diagnostycznych na urządzeniu.

Zbieranie ogólnych informacji o stanie urządzenia

Aby zebrać ogólne informacje o stanie urządzenia, takie jak informacje o baterii, stanie pamięci i numery IMEI (International Mobile Equipment Identity), wykonaj te czynności:

  1. Upewnij się, że urządzenie spełnia warunki wstępne trybu wymiany za dopłatą.

  2. Podłącz urządzenie do stacji roboczej.

  3. Na stacji roboczej uruchom to polecenie:

    adb shell tradeinmode getstatus

    To polecenie zwraca obiekt JSON z informacjami o urządzeniu. Oto przykładowe dane wyjściowe z Pixela 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
        }
      ]
    }
    

    Jeśli factory_reset_protection ma wartość true, urządzenie jest bezpieczne i nie można go zresetować. Jeśli urządzenia nie można zresetować, nie można go ocenić.

    Pola cameras i uiccs są dostępne w Androidzie 17 lub nowszym.

Określanie stanu systemu operacyjnego Android

Aby zebrać informacje o stanie systemu operacyjnego Android, np. czy jest to zatwierdzona kompilacja, wykonaj te czynności:

  1. Podłącz urządzenie do stacji roboczej.
  2. Upewnij się, że urządzenie ma połączenie z internetem.
  3. Na stacji roboczej uruchom to polecenie:

    adb shell tradeinmode getstatus --challenge CHALLENGE

    CHALLENGE to losowo wygenerowany ciąg alfanumeryczny, np. p4tRsuHjWB. To polecenie zwraca kod JSON zawierający pole attestation (poświadczenie) z rekordem poświadczenia w formacie Base64.

    To polecenie dołącza informacje o poświadczeniu do informacji zwracanych przez polecenie getstatus. Informacje o poświadczeniu wyglądają tak:

    "attestation": {
      "certificates": "AAAC\/DCCAvgwggKeoAMCAQICAQEwCgYIKoZIzj0EAwIwOTEMMAoGA1UEDAwDVEVFMSkwJwYDVQQF\n
        EyBmOTIyZTZhOWFkZmRjNjU0NmZiOWU1YmNlNzhiMDUzMzAeFw03MDAxMDEwMDAwMDBaFw00ODAx\n
        MDEwMDAwMDBaMB8xHTAbBgNVBAMTFEFuZHJvaWQgS2V5c3RvcmUgS2V5MFkwEwYHKoZIzj0CAQYI\n
        KoZIzj0DAQcDQgAEz9un3HpDJQy\/j7l0bWzw6WnRRMjFjvu6rg7+dCzFW93u+otCPK4VjmSjyYw
        ...
    }
    

    Urządzenia wprowadzane na rynek z Androidem 16 lub nowszym wymagają połączenia z internetem, aby utworzyć rekord poświadczenia. Poświadczenie należy przeprowadzić w trybie oceny po skonfigurowaniu połączenia, ponieważ w kreatorze konfiguracji się nie powiedzie.

  4. Przeanalizuj informacje o poświadczeniu za pomocą jednej z tych metod:

    Aby na przykład użyć narzędzia parse_tim_attestation, uruchom to polecenie:

    parse_tim_attestation --challenge CHALLENGE output_file

    CHALLENGE musi być tym samym wyzwaniem, którego użyto do uzyskania informacji o poświadczeniu.

    Jeśli dane wyjściowe z kroku 2 zostały zapisane w pliku output_file, możesz podać jego nazwę. W przeciwnym razie informacje o poświadczeniu są odczytywane ze standardowego wejścia.

    Zwracany jest obiekt JSON z informacjami o systemie operacyjnym 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"
    

    Jeśli trustworthy ma wartość yes, system operacyjny jest uznawany za zaufany, kompilacja jest podpisana, a numer IMEI nie jest sfałszowany.

    Pamiętaj, że do przeprowadzenia poświadczenia wymagane jest połączenie z internetem zarówno na urządzeniu, jak i na hoście.

Testowanie trybu wymiany za dopłatą

Podczas programowania należy przetestować urządzenie, aby upewnić się, że prawidłowo przechodzi w tryb wymiany za dopłatą i z niego wychodzi. Aby sprawdzić, czy urządzenie może przechodzić w tryb wymiany za dopłatą i z niego wychodzić, wykonaj te czynności:

  1. Podłącz urządzenie do stacji roboczej.

  2. Na stacji roboczej uruchom ponownie urządzenie w trybie wymiany za dopłatą:

    adb shell tradeinmode testing start

    Urządzenie uruchomi się ponownie i przejdzie w tryb wymiany za dopłatą. Po przejściu w tryb wymiany za dopłatą możesz użyć dowolnego polecenia adb shell tradein.

  3. Sprawdź, czy tryb wymiany za dopłatą jest aktywny:

    adb shell tradeinmode testing status

    Urządzenie rozpoznaje, że testowanie trybu wymiany za dopłatą jest aktywne.

  4. Wyjdź z trybu wymiany za dopłatą i przywróć pełny dostęp do adb:

    adb shell tradeinmode testing stop

Integracja niestandardowego kreatora konfiguracji

Polecenie evaluate nie będzie działać na urządzeniach z niestandardowymi kreatorami konfiguracji, chyba że dodasz odbiornik transmisji. Aby dodać odbiornik transmisji do niestandardowej aplikacji kreatora konfiguracji:

  1. Zadeklaruj odbiornik w manifeście aplikacji:

    <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. Utwórz odbiornik transmisji podobny do tego:

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

Odbiornik musi wykonywać te działania w podanej kolejności.

  1. Sprawdź, czy persist.adb.tradeinmode ma wartość 2.
  2. Sprawdź, czy nie ma blokad ochrony przed przywróceniem do ustawień fabrycznych ani blokad antykradzieżowych.
  3. Przygotuj urządzenie, upewniając się, że Settings.Secure.USER_SETUP_COMPLETE i Settings.Global.DEVICE_PROVISIONED mają wartość 1.
  4. Zamknij aktywność kreatora konfiguracji, aby urządzenie wyświetlało ekran główny.

Informacje o trybie wymiany za dopłatą

W tej sekcji znajdziesz informacje o wszystkich poleceniach trybu wymiany za dopłatą.

evaluate

adb shell tradeinmode evaluate

Przechodzi w tryb oceny, pomijając kreatora konfiguracji tak, jakby użytkownik ręcznie pominął każdy ekran konfiguracji.

Po pominięciu kreatora konfiguracji możesz uruchomić na urządzeniu dodatkowe polecenia ADB lub testy funkcjonalne.

Po wyjściu z trybu oceny następuje przywrócenie ustawień fabrycznych, aby mieć pewność, że żadne artefakty z testów nie zostaną przypadkowo przeniesione do klientów.

getstatus

adb shell tradeinmode getstatus [--challenge CHALLENGE]

Zwraca ciąg JSON z informacjami o systemie, w tym o stanie baterii i pamięci urządzenia.

Aby zwrócić dodatkowe pole poświadczenia, dodaj parametr --challenge i losowo wygenerowany alfanumeryczny klucz wyzwania. Przeanalizuj tę odpowiedź, aby zidentyfikować kluczowe informacje o systemie operacyjnym, takie jak stan programu rozruchowego (zablokowany lub odblokowany) i ważność numerów seryjnych IMEI.

poweroff

adb shell tradeinmode poweroff

Wyłącza urządzenie. Użyj tego polecenia, aby zapobiec szybkiemu zużyciu baterii, gdy urządzenie nie jest aktywnie testowane ani oceniane.

reboot

adb shell tradeinmode reboot

Uruchamia ponownie urządzenie.

testing start

adb shell tradeinmode testing start

Uruchamia ponownie urządzenie w trybie wymiany za dopłatą. To polecenie działa tylko w kreatorze konfiguracji. Po wydaniu tego polecenia autoryzacja jest pomijana i działają tylko polecenia trybu wymiany za dopłatą.

To polecenie działa tylko na urządzeniach z userdebug, eng, lub user kompilacjami. Kompilacja user musi mieć ustawioną wartość ro=debuggable=1.

testing status

adb shell tradeinmode testing status

Określa, czy testowanie trybu wymiany za dopłatą jest aktywne.

To polecenie działa tylko na urządzeniach z userdebug, eng, lub user kompilacjami. Kompilacja user musi mieć ustawioną wartość ro=debuggable=1.

testing stop

adb shell tradeinmode testing stop

Przywraca urządzenie do trybu, w którym było przed wydaniem polecenia adb shell tradeinmode testing start.

To polecenie działa tylko na urządzeniach z userdebug, eng, lub user kompilacjami. Kompilacja user musi mieć ustawioną wartość ro=debuggable=1.

testing wipe

adb shell tradeinmode testing wipe

Przywraca ustawienia fabryczne na urządzeniu.

To polecenie działa tylko na urządzeniach z userdebug, eng, lub user kompilacjami. Kompilacja user musi mieć ustawioną wartość ro=debuggable=1.

wait-until-ready

adb shell tradeinmode wait-until-ready

Czeka, aż usługi systemowe będą gotowe, aby tryb wymiany za dopłatą mógł w pełni działać. Użyj tego polecenia w automatyzacji, aby mieć pewność, że polecenia trybu wymiany za dopłatą zakończą się powodzeniem.

Możesz dodać wait-until-ready przed innymi poleceniami trybu wymiany za dopłatą. Oto na przykład polecenie wait-until-ready połączone z poleceniem getstatus:

adb shell tradeinmode wait-until-ready getstatus