Uzyskiwanie informacji o stanie systemu

Po uruchomieniu urządzenia z Androidem 16 (lub nowszym) uruchamia się tryb wymiany, który umożliwia nawiązanie połączenia z urządzeniem za pomocą adb i użycie komendy w celu 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 być przywrócone do ustawień fabrycznych.
  • Urządzenie nie może mieć dostępu do sieci komórkowej.
  • Urządzenie nie może mieć połączenia ani założonego konta.
  • Na urządzeniu musi być uruchomiona kompilacja bez debugowania.

Po przejściu przez kreatora konfiguracji urządzenie zostanie umieszczone w trybie oceny, który umożliwia wykonywanie pełnego zakresu poleceń adb i przeprowadzanie dodatkowych testów diagnostycznych na urządzeniu.

Zbieranie ogólnych informacji zdrowotnych

Aby zebrać ogólne informacje o stanie urządzenia, takie jak informacje o baterii, stanie pamięci i numerach IMEI, wykonaj te czynności:

  1. Sprawdź, czy Twoje urządzenie spełnia warunki wstępne dla 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. Poniżej znajduje się przykładowy wynik 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"
    }
    

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

Określanie stanu systemu operacyjnego Android

Aby uzyskać informacje o stanie systemu operacyjnego Android, np. czy jest to zatwierdzona wersja, 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 dane JSON, w tym pole attestation zawierające rekord atesta w formacie base64.

    To polecenie dołącza informacje dotyczące potwierdzenia do informacji zwróconych 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 z Androidem 16 lub nowszym wymagają połączenia z internetem, aby utworzyć rekord uwierzytelnienia. Atestat powinien być przeprowadzony w trybie oceny po skonfigurowaniu połączenia, ponieważ nie powiedzie się, jeśli zostanie przeprowadzony w kreatorze konfiguracji.

  4. Przeanalizuj informacje dotyczące certyfikatu za pomocą jednej z tych metod:

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

    parse_tim_attestation --challenge CHALLENGE output_file

    Wartość CHALLENGE musi być taka sama jak wartość wyzwania użyta do uzyskania informacji o poświadczeniu.

    Jeśli w kroku 2 zapiszesz dane wyjściowe w pliku output_file, możesz podać jego nazwę. W przeciwnym razie informacje o weryfikacji 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 jest równe yes, system operacyjny jest uważany za zaufany. Wersja jest podpisana, a numer IMEI nie jest sfałszowany.

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

Testowanie trybu wymiany za dopłatą

Podczas tworzenia aplikacji należy przetestować urządzenie, aby mieć pewność, że przechodzi ono prawidłowo w tryb wymiany i z niego. Aby sprawdzić, czy urządzenie może wejść w tryb wymiany i z niego wyjść:

  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 zostanie zrestartowane i wejdzie w tryb wymiany za dopłatą. Po przejściu do trybu wymiany możesz używać dowolnego polecenia adb shell tradein.

  3. Upewnij się, że tryb wymiany jest aktywny:

    adb shell tradeinmode testing status

    Urządzenie rozpoznaje, że testowanie w trybie wymiany jest aktywne.

  4. Wyjście z trybu wymiany za dopłatą i przywrócenie pełnego dostępu do adb:

    adb shell tradeinmode testing stop

Integracja z kreatorem konfiguracji niestandardowej

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

  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:

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

Odbiorca musi wykonać podane niżej czynności w podanej kolejności.

  1. Sprawdź, czy persist.adb.tradeinmode jest ustawiony na 2.
  2. Sprawdź, czy nie ma ochrony przed przywracaniem do ustawień fabrycznych ani blokad antykradzieżowych.
  3. Przygotuj urządzenie, upewniając się, że Settings.Secure.USER_SETUP_COMPLETESettings.Global.DEVICE_PROVISIONED są ustawione na 1.
  4. Zamknij aktywność kreatora konfiguracji, aby przejść na ekran główny.

Informacje o trybie wymiany za dopłatą

W tej sekcji opisano wszystkie polecenia w trybie wymiany.

oceniać

adb shell tradeinmode evaluate

Wchodzi w tryb oceny, pomijając kreatora konfiguracji, tak jakby użytkownik ręcznie pomijał wszystkie ekrany konfiguracji.

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

Gdy opuścisz tryb oceny, nastąpi przywrócenie ustawień fabrycznych, aby żadne artefakty z testów nie zostały przypadkowo przeniesione do klientów.

getstatus

adb shell tradeinmode getstatus [--challenge CHALLENGE]

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

Dodaj parametr --challenge, a za nim losowo wygenerowany klucz alfanumeryczny, aby zwrócić dodatkowe pole uwierzytelniania. Przeanalizuj tę odpowiedź, aby poznać najważniejsze informacje o systemie operacyjnym, takie jak stan bootloadera (zablokowany lub odblokowany) oraz ważność numerów seryjnych IMEI.

poweroff

adb shell tradeinmode poweroff

Wyłącza urządzenie. Użyj tego polecenia, aby zapobiec rozładowywaniu się baterii, gdy urządzenie nie jest aktywnie testowane ani oceniane.

Uruchom ponownie

adb shell tradeinmode reboot

Uruchom ponownie urządzenie.

rozpoczęcie testowania

adb shell tradeinmode testing start

Uruchom ponownie urządzenie w trybie wymiany. To polecenie działa tylko w kroku konfiguracji. Po wydaniu tego polecenia autoryzacja jest pomijana i działają tylko polecenia w trybie wymiany.

To polecenie działa tylko na urządzeniach z kompilacją userdebug, eng lub user. W wersji user musi być ustawiona opcja ro=debuggable=1.

stan testowania

adb shell tradeinmode testing status

Wskazuje, czy testowanie trybu wymiany jest aktywne.

To polecenie działa tylko na urządzeniach z kompilacją userdebug, eng lub user. W wersji user musi być ustawiona opcja 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 kompilacją userdebug, eng lub user. W wersji user musi być ustawiona opcja ro=debuggable=1.

testowanie czyszczenia

adb shell tradeinmode testing wipe

przywraca urządzenie do ustawień fabrycznych.

To polecenie działa tylko na urządzeniach z kompilacją userdebug, eng lub user. W wersji user musi być ustawiona opcja ro=debuggable=1.

wait-until-ready

adb shell tradeinmode wait-until-ready

Czeka, aż usługi systemowe będą gotowe, aby tryb wymiany mógł działać w pełni. Użyj tego polecenia w ramach automatyzacji, aby mieć pewność, że polecenia w trybie wymiany będą działać prawidłowo.

Możesz dodać wait-until-ready przed innymi poleceniami w trybie wymiany. Na przykład: wait-until-ready jest połączone z getstatus:

adb shell tradeinmode wait-until-ready getstatus