Uzyskiwanie informacji o stanie systemu

Gdy urządzenie z Androidem 16 (lub nowszym) zostanie uruchomione, przechodzi w tryb wymiany, który umożliwia połączenie z nim 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.
  • Urządzenie musi korzystać z kompilacji, której nie można debugować.

Tryb wymiany za dopłatą umożliwia wysyłanie zapytań o podstawowe informacje diagnostyczne lub przejście do trybu oceny, w którym możesz wykonywać pełny zakres poleceń adb i przeprowadzać dodatkowe testy diagnostyczne na urządzeniu.

Zbieranie ogólnych informacji o zdrowiu

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

  1. Sprawdź, czy urządzenie spełnia wymagania wstępne dotyczące 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 znajdziesz 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"
    }
    

    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 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 jest połączone 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 JSON, który zawiera pole attestation z rekordem atestu zakodowanym w formacie base64.

    To polecenie dołącza informacje o atestowaniu do informacji zwracanych przez polecenie getstatus. Informacje o atestach 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 atestu. Atestowanie należy przeprowadzić w trybie oceny po skonfigurowaniu połączenia, ponieważ w kreatorze konfiguracji się nie powiedzie.

  4. Przeanalizuj informacje o atestowaniu, korzystając z 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 wyzwanie użyte do uzyskania informacji o atestowaniu.

    Jeśli wynik kroku 2 został zapisany w pliku output_file, możesz podać jego nazwę. W przeciwnym razie informacje o atestowaniu 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 uznawany za zaufany, kompilacja jest podpisana, a numer IMEI nie jest sfałszowany.

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

Testowanie trybu wymiany za dopłatą

Podczas opracowywania urządzenia należy je przetestować, aby upewnić się, że prawidłowo wchodzi w tryb wymiany za dopłatą i z niego wychodzi. Aby sprawdzić, czy urządzenie może przejść w tryb wymiany za dopłatą i z niego wyjść, 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 możesz użyć dowolnego polecenia adb shell tradein.

  3. Sprawdź, czy tryb wymiany 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 kreatora konfiguracji niestandardowej

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

  1. Zadeklaruj odbiorcę 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.
     }
    }
    

Odbiorca musi wykonać te czynności w podanej kolejności.

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

Informacje o trybie wymiany za dopłatą

W tej sekcji opisujemy wszystkie polecenia trybu wymiany.

oceniać,

adb shell tradeinmode evaluate

Włącza tryb oceny, pomijając kreatora konfiguracji, tak jakby użytkownik ręcznie pominął wszystkie ekrany 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 przekazane klientom.

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.

Dołącz parametr --challenge, a po nim losowo wygenerowany klucz alfanumeryczny, aby zwrócić dodatkowe pole atestu. 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.

wyłączenie

adb shell tradeinmode poweroff

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

Uruchom ponownie

adb shell tradeinmode reboot

Uruchamia ponownie urządzenie.

rozpoczęcie testu,

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.

To polecenie działa tylko na urządzeniach z wersjami userdebug, eng lub user. W przypadku kompilacji user musi być ustawiona wartość ro=debuggable=1.

stan testowania,

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 wersjami userdebug, eng lub user. W przypadku kompilacji user musi być ustawiona wartość ro=debuggable=1.

przerwanie testu,

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 wersjami userdebug, eng lub user. W przypadku kompilacji user musi być ustawiona wartość ro=debuggable=1.

testowe czyszczenie pamięci

adb shell tradeinmode testing wipe

Przywraca urządzenie do ustawień fabrycznych.

To polecenie działa tylko na urządzeniach z wersjami userdebug, eng lub user. W przypadku kompilacji user musi być ustawiona wartość 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ł w pełni działać. Użyj tego polecenia w automatyzacji, aby mieć pewność, że polecenia trybu wymiany za dopłatą działają prawidłowo.

Przed innymi poleceniami trybu wymiany możesz dodać znak wait-until-ready. Na przykład wait-until-ready połączone z getstatus:

adb shell tradeinmode wait-until-ready getstatus