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:
Upewnij się, że urządzenie spełnia warunki wstępne trybu wymiany za dopłatą.
Podłącz urządzenie do stacji roboczej.
Na stacji roboczej uruchom to polecenie:
adb shell tradeinmode getstatusTo 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_protectionma 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
camerasiuiccssą 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:
- Podłącz urządzenie do stacji roboczej.
- Upewnij się, że urządzenie ma połączenie z internetem.
Na stacji roboczej uruchom to polecenie:
adb shell tradeinmode getstatus --challenge CHALLENGECHALLENGE 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.
Przeanalizuj informacje o poświadczeniu za pomocą jednej z tych metod:
- Użyj narzędzia
parse_tim_attestation, które jest tworzone podczas kompilowania AOSP. - Użyj biblioteki poświadczeń klucza Androida.
Aby na przykład użyć narzędzia
parse_tim_attestation, uruchom to polecenie:parse_tim_attestation --challenge CHALLENGE output_fileCHALLENGE 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
trustworthyma 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.
- Użyj narzędzia
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:
Podłącz urządzenie do stacji roboczej.
Na stacji roboczej uruchom ponownie urządzenie w trybie wymiany za dopłatą:
adb shell tradeinmode testing startUrzą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.Sprawdź, czy tryb wymiany za dopłatą jest aktywny:
adb shell tradeinmode testing statusUrzą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 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:
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>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.
- Sprawdź, czy
persist.adb.tradeinmodema wartość2. - Sprawdź, czy nie ma blokad ochrony przed przywróceniem do ustawień fabrycznych ani blokad antykradzieżowych.
- Przygotuj urządzenie, upewniając się, że
Settings.Secure.USER_SETUP_COMPLETEiSettings.Global.DEVICE_PROVISIONEDmają wartość1. - 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 evaluatePrzechodzi 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 poweroffWyłą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 rebootUruchamia ponownie urządzenie.
testing start
adb shell tradeinmode testing startUruchamia 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 statusOkreś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 stopPrzywraca 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 wipePrzywraca 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-readyCzeka, 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