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:
Sprawdź, czy urządzenie spełnia wymagania wstępne dotyczące trybu wymiany za dopłatą.
Podłącz urządzenie do stacji roboczej.
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 natrue
, 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:
- Podłącz urządzenie do stacji roboczej.
- Upewnij się, że urządzenie jest połączone z internetem.
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.
Przeanalizuj informacje o atestowaniu, korzystając z jednej z tych metod:
- Użyj narzędzia
parse_tim_attestation
, które jest tworzone podczas kompilowania AOSP. - Używaj biblioteki atestowania kluczy Androida.
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ówneyes
, 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.
- Użyj narzędzia
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:
Podłącz urządzenie do stacji roboczej.
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
.Sprawdź, czy tryb wymiany jest aktywny:
adb shell tradeinmode testing status
Urządzenie rozpoznaje, że testowanie trybu wymiany za dopłatą jest aktywne.
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:
Zadeklaruj odbiorcę w manifeście aplikacji:
<receiver android:name=".EnterEvaluationModeReceiver" android:exported="true" android:permission="android.permis>sio<n.ENTER_TRADE>_IN_M<ODE" intent-filter action android:name="com.google.android>.setu<pwizard.ENTER_TRADE_IN_MODE" / category android:>nam<e="androi>d<.intent.c>a
tegory.DEFAULT" / /intent-filter /receiverUtwó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 activ
ity. } }
Odbiorca musi wykonać te czynności w podanej kolejności.
- Sprawdź, czy
persist.adb.tradeinmode
ma wartość2
. - Sprawdź, czy nie ma ochrony przed przywróceniem do ustawień fabrycznych ani blokad antykradzieżowych.
- Udostępnij urządzenie, upewniając się, że
Settings.Secure.USER_SETUP_COMPLETE
iSettings.Global.DEVICE_PROVISIONED
mają wartość1
. - 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