Android Debug Bridge (adb
) to wszechstronne narzędzie wiersza poleceń, które umożliwia komunikację z urządzeniem. Polecenie adb
ułatwia wykonywanie różnych działań na urządzeniu, takich jak instalowanie i debugowanie aplikacji. adb
zapewnia dostęp do powłoki systemu Unix, której możesz używać do uruchamiania na urządzeniu różnych poleceń. Jest to program typu klient-serwer, który obejmuje 3 komponenty:
- Klient, który wysyła polecenia. Klient działa na Twoim komputerze deweloperskim. Klienta możesz wywołać z terminala wiersza poleceń, wydając polecenie
adb
. - demon (adbd), który wykonuje polecenia na urządzeniu; Demon działa w tle na każdym urządzeniu.
- serwer, który zarządza komunikacją między klientem a demonem; Serwer działa jako proces w tle na komputerze deweloperskim.
adb
jest częścią pakietu narzędzi platformy Android SDK. Pobierz ten pakiet za pomocą Menedżera SDK, który zainstaluje go w lokalizacji android_sdk/platform-tools/
. Jeśli chcesz pobrać samodzielny pakiet narzędzi platformy Android SDK, kliknij tutaj.
Informacje o łączeniu urządzenia do użytku w adb
, w tym o korzystaniu z Asystenta połączeń do rozwiązywania typowych problemów, znajdziesz w artykule Uruchamianie aplikacji na urządzeniu.
Jak działa adb
Gdy uruchamiasz klienta adb
, najpierw sprawdza on, czy jest już uruchomiony proces serwera adb
. Jeśli nie, uruchamia proces serwera.
Po uruchomieniu serwer wiąże się z lokalnym portem TCP 5037 i nasłuchuje poleceń wysyłanych z klientów adb
.
Uwaga: wszystkie klienty adb
używają portu 5037 do komunikacji z serwerem adb
.
Serwer nawiązuje połączenia ze wszystkimi działającymi urządzeniami.
Wyszukuje emulatory, skanując porty o nieparzystych numerach w zakresie od 5555 do 5585, czyli w zakresie używanym przez pierwsze 16 emulatorów. Gdy serwer znajdzie adb
demona (adbd), nawiązuje połączenie z tym portem.
Każdy emulator używa pary kolejnych portów – portu o parzystym numerze do połączeń z konsolą i portu o nieparzystym numerze do połączeń adb
. Na przykład:
Emulator 1, konsola: 5554
Emulator 1, adb
: 5555
Emulator 2, konsola: 5556
Emulator 2, adb
: 5557
itd.
Jak widać, emulator połączony z adb
na porcie 5555 jest taki sam jak emulator, którego konsola nasłuchuje na porcie 5554.
Gdy serwer skonfiguruje połączenia ze wszystkimi urządzeniami, możesz używać poleceń adb
, aby uzyskać dostęp do tych urządzeń. Serwer zarządza połączeniami z urządzeniami i obsługuje polecenia z wielu adb
klientów, więc możesz sterować dowolnym urządzeniem z dowolnego klienta lub skryptu.
Włącz debugowanie adb na urządzeniu
Aby używać adb z urządzeniem podłączonym przez USB, musisz włączyć debugowanie USB w ustawieniach systemowych urządzenia w sekcji Opcje programisty. Na Androidzie 4.2 (API na poziomie 17) i nowszych wersjach ekran Opcje programisty jest domyślnie ukryty. Aby go wyświetlić, włącz opcje programisty.
Możesz teraz połączyć urządzenie za pomocą USB. Aby sprawdzić, czy urządzenie jest połączone, wykonaj polecenie adb devices
w katalogu android_sdk/platform-tools/
. Jeśli urządzenie jest połączone, jego nazwa będzie widoczna jako „urządzenie”.
Uwaga: gdy podłączysz urządzenie z Androidem 4.2.2 (API na poziomie 17) lub nowszym, system wyświetli okno z pytaniem, czy zaakceptować klucz RSA, który umożliwia debugowanie na tym komputerze. Ten mechanizm zabezpieczeń chroni urządzenia użytkowników, ponieważ uniemożliwia wykonywanie debugowania USB i innych poleceń adb, dopóki nie odblokujesz urządzenia i nie potwierdzisz okna dialogowego.
Więcej informacji o łączeniu się z urządzeniem przez USB znajdziesz w artykule Uruchamianie aplikacji na urządzeniu.
Łączenie z urządzeniem przez Wi-Fi
Uwaga: poniższe instrukcje nie dotyczą urządzeń z Wear OS z Androidem 11 (poziom interfejsu API 30). Więcej informacji znajdziesz w przewodniku na temat debugowania aplikacji na Wear OS.
Android 11 (poziom interfejsu API 30) i nowsze wersje obsługują wdrażanie i debugowanie aplikacji bezprzewodowo ze stacji roboczej za pomocą Android Debug Bridge (adb). Możesz na przykład wdrożyć aplikację z możliwością debugowania na wielu urządzeniach zdalnych bez konieczności fizycznego podłączania urządzenia przez USB. Eliminuje to konieczność rozwiązywania typowych problemów z połączeniem USB, takich jak instalacja sterownika.
Zanim zaczniesz korzystać z debugowania bezprzewodowego, wykonaj te czynności:
-
Sprawdź, czy stacja robocza i urządzenie są połączone z tą samą siecią bezprzewodową.
-
Upewnij się, że na telefonie masz Androida 11 (API na poziomie 30) lub nowszego, a na telewizorze i zegarku z Wear OS – Androida 13 (API na poziomie 33) lub nowszego. Więcej informacji znajdziesz w artykule Sprawdzanie i aktualizowanie wersji Androida.
-
Jeśli używasz IDE, upewnij się, że masz zainstalowaną najnowszą wersję Android Studio. Możesz ją pobrać tutaj.
-
Na stacji roboczej zaktualizuj narzędzia platformy SDK do najnowszej wersji.
Aby używać debugowania bezprzewodowego, musisz sparować urządzenie ze stacją roboczą za pomocą kodu QR lub kodu parowania. Stacja robocza i urządzenie muszą być połączone z tą samą siecią bezprzewodową. Aby połączyć się z urządzeniem, wykonaj te czynności:
-
Włącz opcje programisty na urządzeniu.
-
Otwórz Android Studio i w menu konfiguracji uruchamiania wybierz Pair Devices Using Wi-Fi (Parowanie urządzeń przez Wi-Fi).
Rysunek 1. Menu konfiguracji uruchamiania.Pojawi się okno Sparuj urządzenia przez Wi-Fi, jak pokazano na rysunku 2.
Rysunek 2. Wyskakujące okienko do parowania urządzeń przy użyciu kodu QR lub kodu parowania. -
Na urządzeniu kliknij Debugowanie bezprzewodowe i sparuj urządzenie:
Rysunek 3. Zrzut ekranu ustawienia Debugowanie bezprzewodowe na telefonie Google Pixel.-
Aby sparować urządzenie za pomocą kodu QR, kliknij Sparuj urządzenie za pomocą kodu QR i zeskanuj kod QR uzyskany z wyskakującego okienka Sparuj urządzenia przez Wi-Fi pokazanego na ilustracji 2.
-
Aby sparować urządzenie przy pomocy kodu parowania, w wyskakującym okienku Sparuj urządzenia przez Wi-Fi kliknij Sparuj urządzenie przy pomocy kodu parowania. Na urządzeniu wybierz Sparuj przy pomocy kodu parowania i zanotuj podany 6-cyfrowy kod. Gdy urządzenie pojawi się w oknie Sparuj urządzenia przez Wi-Fi, możesz kliknąć Sparuj i wpisać 6-cyfrowy kod wyświetlony na urządzeniu.
Rysunek 4. Przykład wpisywania 6-cyfrowego kodu.
-
-
Po sparowaniu urządzenia możesz spróbować wdrożyć na nim aplikację.
Aby sparować inne urządzenie lub zapomnieć o bieżącym urządzeniu na stacji roboczej, otwórz Debugowanie bezprzewodowe na urządzeniu. Kliknij nazwę stacji roboczej w sekcji Sparowane urządzenia i wybierz Zapomnij.
-
Jeśli chcesz szybko włączać i wyłączać debugowanie bezprzewodowe, możesz użyć kafelków szybkich ustawień dla programisty w sekcji Debugowanie bezprzewodowe, która znajduje się w Opcjach programisty > Kafelki szybkich ustawień dla programisty.
Rysunek 5. Ustawienie Kafelki szybkich ustawień dla programisty umożliwia szybkie włączanie i wyłączanie debugowania bezprzewodowego.
Połączenie Wi-Fi za pomocą wiersza poleceń
Aby połączyć się z urządzeniem za pomocą wiersza poleceń bez użycia Android Studio, wykonaj te czynności:
-
Włącz opcje programisty na urządzeniu, jak opisano wcześniej.
-
Włącz na urządzeniu Debugowanie bezprzewodowe, jak opisano wcześniej.
-
Na stacji roboczej otwórz okno terminala i przejdź do katalogu
android_sdk/platform-tools
. -
Aby znaleźć adres IP, numer portu i kod parowania, wybierz Sparuj urządzenie przy pomocy kodu parowania. Zapisz adres IP, numer portu i kod parowania wyświetlane na urządzeniu.
-
W terminalu stacji roboczej uruchom polecenie
adb pair ipaddr:port
. Użyj adresu IP i numeru portu podanych powyżej. -
Gdy pojawi się prośba, wpisz kod parowania, jak pokazano poniżej.
Rysunek 6. Pojawi się komunikat informujący o sparowaniu urządzenia.
Rozwiązywanie problemów z połączeniem bezprzewodowym
Jeśli masz problemy z połączeniem bezprzewodowym z urządzeniem, wykonaj te czynności, aby rozwiązać problem.
Sprawdź, czy stacja robocza i urządzenie spełniają wymagania wstępne.
Sprawdź, czy stacja robocza i urządzenie spełniają wymagania wstępne wymienione na początku tej sekcji.
Sprawdzanie innych znanych problemów
Poniżej znajdziesz listę znanych obecnie problemów z debugowaniem bezprzewodowym (za pomocą adb lub Androida Studio) oraz sposoby ich rozwiązywania:
-
Nie można połączyć się z siecią Wi-Fi: bezpieczne sieci Wi-Fi, takie jak sieci firmowe, mogą blokować połączenia P2P i uniemożliwiać połączenie przez Wi-Fi. Spróbuj połączyć się za pomocą kabla lub innej (niekorporacyjnej) sieci Wi-Fi. Połączenie bezprzewodowe za pomocą
adb connect ip:port
przez protokół TCP/IP (po początkowym połączeniu USB) to kolejna opcja, jeśli możesz skorzystać z sieci innej niż firmowa. -
adb
przez Wi-Fi czasami wyłącza się automatycznie: może się tak zdarzyć, jeśli urządzenie przełączy się na inną sieć Wi-Fi lub rozłączy się z siecią. Aby rozwiązać ten problem, połącz się ponownie z siecią. -
Urządzenie nie łączy się po sparowaniu:
adb
korzysta z mDNS, aby wykrywać sparowane urządzenia i automatycznie się z nimi łączyć. Jeśli konfiguracja sieci lub urządzenia nie obsługuje mDNS lub ma wyłączoną tę funkcję, musisz ręcznie połączyć się z urządzeniem za pomocąadb connect ip:port
.
Połączenie bezprzewodowe z urządzeniem po pierwszym połączeniu przez USB (jedyna opcja dostępna na urządzeniach z Androidem 10 i starszym)
Uwaga: ten proces dotyczy też Androida 11 (i nowszych wersji), z tym zastrzeżeniem, że obejmuje on również *początkowe* połączenie za pomocą fizycznego kabla USB.
Uwaga: poniższe instrukcje nie dotyczą urządzeń Wear z Androidem 10 (poziom interfejsu API 29) lub starszym. Więcej informacji znajdziesz w przewodniku na temat debugowania aplikacji na Wear OS.
adb
zwykle komunikuje się z urządzeniem przez USB, ale możesz też używać adb
przez Wi-Fi. Aby połączyć urządzenie z Androidem 10 (API na poziomie 29) lub starszym, wykonaj te wstępne czynności przez USB:
-
Połącz urządzenie z Androidem i
adb
komputer hosta z tą samą siecią Wi-Fi. - Podłącz urządzenie do komputera hosta za pomocą kabla USB.
-
Skonfiguruj urządzenie docelowe tak, aby nasłuchiwało połączenia TCP/IP na porcie 5555:
adb tcpip 5555
- Odłącz kabel USB od urządzenia docelowego.
- Znajdź adres IP urządzenia z Androidem. Na przykład na urządzeniu Nexus adres IP znajdziesz w sekcji Ustawienia > Informacje o tablecie (lub Informacje o telefonie) > Stan > Adres IP.
-
Połącz się z urządzeniem za pomocą adresu IP:
adb connect device_ip_address:5555
-
Sprawdź, czy komputer hosta jest połączony z urządzeniem docelowym:
$ adb devices List of devices attached device_ip_address:5555 device
Uwaga: nie wszystkie punkty dostępu są odpowiednie. Konieczne może być użycie punktu dostępu, którego zapora sieciowa jest prawidłowo skonfigurowana do obsługi adb
.
Urządzenie jest teraz połączone z urządzeniem adb
.
Jeśli połączenie adb
z urządzeniem zostanie utracone:
- Upewnij się, że urządzenie główne jest nadal połączone z tą samą siecią Wi-Fi co urządzenie z Androidem.
-
Połącz się ponownie, wykonując jeszcze raz krok
adb connect
. -
Jeśli to nie pomoże, zresetuj
adb
hosta:adb kill-server
Następnie zacznij od początku.
Wysyłanie zapytania dotyczącego urządzeń
Przed wydaniem poleceń adb
warto wiedzieć, które instancje urządzeń są połączone z serwerem adb
. Wygeneruj listę podłączonych urządzeń za pomocą polecenia devices
:
adb devices -l
W odpowiedzi adb
wyświetla informacje o stanie każdego urządzenia:
- Numer seryjny:
adb
tworzy ciąg znaków, który jednoznacznie identyfikuje urządzenie na podstawie numeru portu. Oto przykładowy numer seryjny:emulator-5554
- Stan: stan połączenia urządzenia może być jednym z tych stanów:
offline
: urządzenie nie jest połączone z sieciąadb
lub nie odpowiada.device
: urządzenie jest połączone z serweremadb
. Pamiętaj, że ten stan nie oznacza, że system Android jest w pełni uruchomiony i działa, ponieważ urządzenie łączy się zadb
, gdy system jest jeszcze w trakcie uruchamiania. Po uruchomieniu jest to normalny stan operacyjny urządzenia.no device
: Brak podłączonych urządzeń.
- Opis: jeśli uwzględnisz opcję
-l
, poleceniedevices
poinformuje Cię, czym jest urządzenie. Te informacje są przydatne, gdy masz podłączonych kilka urządzeń, ponieważ pozwalają je odróżnić.
W przykładzie poniżej pokazujemy polecenie devices
i jego dane wyjściowe. Działają 3 urządzenia. Pierwsze 2 wiersze na liście to emulatory, a trzeci wiersz to urządzenie sprzętowe podłączone do komputera.
$ adb devices List of devices attached emulator-5556 device product:sdk_google_phone_x86_64 model:Android_SDK_built_for_x86_64 device:generic_x86_64 emulator-5554 device product:sdk_google_phone_x86 model:Android_SDK_built_for_x86 device:generic_x86 0a388e93 device usb:1-1 product:razor model:Nexus_7 device:flo
Emulatora nie ma na liście
Polecenie adb devices
ma sekwencję poleceń w przypadku, gdy uruchomione emulatory nie są widoczne w danych wyjściowych polecenia adb devices
, mimo że są widoczne na pulpicie. Dzieje się tak, gdy wszystkie te warunki są spełnione:
- Serwer
adb
nie działa. - Użyj polecenia
emulator
z opcją-port
lub-ports
i nieparzystą wartością portu z zakresu od 5554 do 5584. - Wybrany port o nieparzystym numerze nie jest zajęty, więc połączenie może zostać nawiązane na określonym porcie. Jeśli jednak jest zajęty, emulator przełącza się na inny port, który spełnia wymagania opisane w punkcie 2.
- Serwer
adb
uruchamia się po uruchomieniu emulatora.
Jednym ze sposobów uniknięcia tej sytuacji jest pozwolenie emulatorowi na wybór własnych portów i uruchamianie nie więcej niż 16 emulatorów jednocześnie. Innym sposobem jest zawsze uruchamianie serwera adb
przed użyciem polecenia emulator
, jak pokazano w przykładach poniżej.
Przykład 1: w tej sekwencji poleceń polecenie adb devices
uruchamia serwer adb
, ale lista urządzeń się nie pojawia.
Zatrzymaj serwer adb
i wpisz te polecenia w podanej kolejności. W przypadku nazwy AVD podaj prawidłową nazwę AVD z systemu. Aby wyświetlić listę nazw AVD, wpisz
emulator -list-avds
. Polecenie emulator
znajduje się w katalogu android_sdk/tools
.
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5555 $ adb devices List of devices attached * daemon not running. starting it now on port 5037 * * daemon started successfully *
Przykład 2: w poniższej sekwencji poleceń adb devices
wyświetla listę urządzeń, ponieważ serwer adb
został uruchomiony jako pierwszy.
Aby zobaczyć emulator w danych wyjściowych adb devices
, zatrzymaj serwer adb
, a następnie uruchom go ponownie po użyciu polecenia emulator
i przed użyciem polecenia adb devices
, jak pokazano poniżej:
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5557 $ adb start-server $ adb devices List of devices attached emulator-5557 device
Więcej informacji o opcjach wiersza poleceń emulatora znajdziesz w sekcji Opcje uruchamiania wiersza poleceń.
Wysyłanie poleceń do konkretnego urządzenia
Jeśli działa kilka urządzeń, musisz określić urządzenie docelowe, gdy wydajesz polecenie adb
.
Aby określić cel, wykonaj te czynności:
- Użyj polecenia
devices
, aby uzyskać numer seryjny urządzenia docelowego. - Gdy uzyskasz numer seryjny, użyj opcji
-s
z poleceniamiadb
, aby go określić.- Jeśli zamierzasz wydać wiele poleceń
adb
, możesz ustawić zmienną środowiskową$ANDROID_SERIAL
, aby zawierała numer seryjny. - Jeśli używasz zarówno właściwości
-s
, jak i$ANDROID_SERIAL
, właściwość-s
zastępuje właściwość$ANDROID_SERIAL
.
- Jeśli zamierzasz wydać wiele poleceń
W poniższym przykładzie najpierw pobierana jest lista podłączonych urządzeń, a następnie numer seryjny jednego z nich jest używany do zainstalowania na nim helloWorld.apk
:
$ adb devices List of devices attached emulator-5554 device emulator-5555 device 0.0.0.0:6520 device # To install on emulator-5555 $ adb -s emulator-5555 install helloWorld.apk # To install on 0.0.0.0:6520 $ adb -s 0.0.0.0:6520 install helloWorld.apk
Uwaga: jeśli wydasz polecenie bez określania urządzenia docelowego, gdy dostępnych jest wiele urządzeń, adb
wyświetli błąd „adb: more than one device/emulator” (adb: więcej niż 1 urządzenie lub emulator).
Jeśli masz kilka urządzeń, ale tylko jedno z nich to emulator, użyj opcji -e
, aby wysyłać polecenia do emulatora. Jeśli jest wiele urządzeń, ale tylko jedno urządzenie sprzętowe, użyj opcji -d
, aby wysyłać polecenia do urządzenia sprzętowego.
Instalowanie aplikacji
Za pomocą polecenia install
możesz zainstalować plik APK na emulatorze lub podłączonym urządzeniu:adb
adb install path_to_apk
Podczas instalowania testowego pliku APK musisz użyć opcji -t
z poleceniem install
. Więcej informacji znajdziesz w sekcji -t
.
Aby zainstalować kilka plików APK, użyj polecenia install-multiple
. Jest to przydatne, jeśli pobierasz z Konsoli Play wszystkie pliki APK aplikacji na konkretne urządzenie i chcesz je zainstalować na emulatorze lub urządzeniu fizycznym.
Więcej informacji o tworzeniu pliku APK, który można zainstalować na emulatorze lub instancji urządzenia, znajdziesz w artykule Kompilowanie i uruchamianie aplikacji.
Uwaga: jeśli używasz Androida Studio, nie musisz używać polecenia
adb
bezpośrednio, aby zainstalować aplikację na emulatorze lub urządzeniu. Zamiast tego Android Studio
zajmuje się pakowaniem i instalowaniem aplikacji.
Skonfiguruj przekierowanie portów
Użyj polecenia forward
, aby skonfigurować dowolne przekierowanie portów, które przekazuje żądania na określonym porcie hosta do innego portu na urządzeniu.
W tym przykładzie skonfigurujemy przekierowanie portu hosta 6100 na port urządzenia 7100:
adb forward tcp:6100 tcp:7100
W tym przykładzie skonfigurujemy przekazywanie portu hosta 6100 do lokalnego logd:
adb forward tcp:6100 local:logd
Może to być przydatne, jeśli chcesz sprawdzić, co jest wysyłane do danego portu na urządzeniu. Wszystkie otrzymane dane zostaną zapisane w demonie rejestrowania systemu i wyświetlone w dziennikach urządzenia.
Kopiowanie plików na urządzenie i z niego
Użyj poleceń pull
i push
, aby skopiować pliki na urządzenie i z urządzenia. W przeciwieństwie do polecenia install
, które kopiuje tylko plik APK do określonej lokalizacji, polecenia pull
i push
umożliwiają kopiowanie dowolnych katalogów i plików do dowolnej lokalizacji na urządzeniu.
Aby skopiować plik lub katalog i jego podkatalogi z urządzenia, wykonaj te czynności:
adb pull remote local
Aby skopiować plik lub katalog i jego podkatalogi na urządzenie, wykonaj te czynności:
adb push local remote
Zastąp local
i remote
ścieżkami do plików lub katalogów docelowych na komputerze deweloperskim (lokalnym) i na urządzeniu (zdalnym). Na przykład:
adb push myfile.txt /sdcard/myfile.txt
Zatrzymywanie serwera adb
W niektórych przypadkach, aby rozwiązać problem, musisz zakończyć proces serwera adb
, a następnie go ponownie uruchomić. Może to mieć miejsce na przykład wtedy, gdy adb
nie odpowiada na polecenie.
Aby zatrzymać serwer adb
, użyj polecenia adb kill-server
.
Następnie możesz ponownie uruchomić serwer, wydając dowolne inne polecenie adb
.
Wydawanie poleceń adb
Wydawaj polecenia adb
z wiersza poleceń na komputerze deweloperskim lub ze skryptu, używając tych elementów:
adb [-d | -e | -s serial_number] command
Jeśli działa tylko 1 emulator lub jest podłączone tylko 1 urządzenie, polecenie adb
jest domyślnie wysyłane do tego urządzenia. Jeśli działa wiele emulatorów lub jest podłączonych wiele urządzeń, musisz użyć opcji -d
, -e
lub -s
, aby określić urządzenie docelowe, do którego ma być skierowane polecenie.
Szczegółową listę wszystkich obsługiwanych poleceń adb
możesz wyświetlić za pomocą tego polecenia:
adb --help
Wydawanie poleceń powłoki
Za pomocą polecenia shell
możesz wydawać polecenia urządzeniom za pomocą adb
lub uruchamiać powłokę interaktywną. Aby wydać pojedyncze polecenie, użyj polecenia shell
w ten sposób:
adb [-d |-e | -s serial_number] shell shell_command
Aby uruchomić powłokę interaktywną na urządzeniu, użyj polecenia shell
w ten sposób:
adb [-d | -e | -s serial_number] shell
Aby zamknąć powłokę interaktywną, naciśnij Control+D
lub wpisz exit
.
Android udostępnia większość standardowych narzędzi wiersza poleceń systemu Unix. Aby wyświetlić listę dostępnych narzędzi, użyj tego polecenia:
adb shell ls /system/bin
Pomoc jest dostępna w przypadku większości poleceń za pomocą argumentu --help
.
Wiele poleceń powłoki jest dostarczanych przez toybox.
Ogólna pomoc dotycząca wszystkich poleceń toybox jest dostępna pod adresem toybox --help
.
W przypadku narzędzi platformy Androida w wersji 23 i nowszych adb
obsługuje argumenty w taki sam sposób jak polecenie ssh(1)
. Ta zmiana rozwiązała wiele problemów związanych z wstrzykiwaniem poleceń i umożliwia bezpieczne wykonywanie poleceń zawierających metaznaki powłoki, takie jak adb install Let\'sGo.apk
. Ta zmiana oznacza, że zmieniła się też interpretacja
każdego polecenia zawierającego metaznaki powłoki.
Na przykład adb shell setprop key 'two words'
jest teraz błędem, ponieważ cudzysłowy są pochłaniane przez lokalną powłokę, a urządzenie widzi adb shell setprop key two words
. Aby polecenie działało, umieść je w cudzysłowie dwukrotnie: raz dla powłoki lokalnej i raz dla powłoki zdalnej, tak jak w przypadku polecenia ssh(1)
. Na przykład polecenie adb shell setprop key "'two words'"
działa, ponieważ powłoka lokalna przyjmuje zewnętrzny poziom cytowania, a urządzenie nadal widzi wewnętrzny poziom cytowania: setprop key 'two words'
. Możesz też użyć znaku ucieczki, ale zwykle łatwiej jest użyć podwójnego cudzysłowu.
Zobacz też narzędzie wiersza poleceń Logcat, które jest przydatne do monitorowania dziennika systemowego.
Menedżer aktywności związanej z połączeniami
W adb
powłoceam
możesz wydawać polecenia za pomocą narzędzia menedżera aktywności (am
), aby wykonywać różne działania systemowe, takie jak uruchamianie aktywności, wymuszanie zatrzymania procesu, wysyłanie intencji, modyfikowanie właściwości ekranu urządzenia i inne.
W powłoce składnia am
jest następująca:
am command
Możesz też wydać polecenie menedżera aktywności bezpośrednio z adb
bez wchodzenia do powłoki zdalnej. Na przykład:
adb shell am start -a android.intent.action.VIEW
Tabela 1. Dostępne polecenia menedżera aktywności
Polecenie | Opis |
---|---|
start [options] intent
|
Uruchom Activity określony przez intent . Zobacz specyfikację argumentów intencji. Dostępne opcje:
|
startservice [options] intent
|
Uruchom Service określony przez
intent . Zobacz specyfikację argumentów intencji. Dostępne opcje:
|
force-stop package
|
Wymuś zatrzymanie wszystkich procesów powiązanych z usługą package .
|
kill [options] package
|
Zakończ wszystkie procesy powiązane z aplikacją package . To polecenie zamyka tylko procesy, które można bezpiecznie zamknąć i które nie wpłyną na wygodę użytkownika.
Dostępne opcje:
|
kill-all
|
Zakończ wszystkie procesy w tle. |
broadcast [options] intent
|
Wysyłanie intencji transmisji. Zobacz specyfikację argumentów intencji. Dostępne opcje:
|
instrument [options] component
|
Rozpocznij monitorowanie za pomocą instancji Instrumentation .
Zwykle celem component
jest formularz test_package/runner_class . Dostępne opcje:
|
profile start process file
|
Uruchom program profilujący na process , zapisz wyniki w file .
|
profile stop process
|
Zatrzymaj profiler na process .
|
dumpheap [options] process file
|
Pozbądź się tego stosu process , napisz do file . Dostępne opcje:
|
dumpbitmaps [options] [-p process]
|
Zrzucanie informacji o mapie bitowej z process (poziom interfejsu API 36 i nowszy).
Dostępne opcje:
process , zostaną zrzucone mapy bitowe ze wszystkich procesów.
|
set-debug-app [options] package
|
Ustaw aplikację package do debugowania. Dostępne opcje:
|
clear-debug-app
|
Wyczyść poprzedni pakiet ustawiony do debugowania za pomocą ikony set-debug-app .
|
monitor [options]
|
Rozpocznij monitorowanie awarii lub błędów ANR. Dostępne opcje:
|
screen-compat {on | off} package
|
Steruj trybem zgodności z ekranem urządzenia package .
|
display-size [reset | widthxheight]
|
Zastąp rozmiar wyświetlacza urządzenia.
To polecenie jest przydatne do testowania aplikacji na różnych rozmiarach ekranu przez symulowanie małej rozdzielczości ekranu na urządzeniu z dużym ekranem i odwrotnie.
Przykład: |
display-density dpi
|
Zastąp gęstość wyświetlacza urządzenia.
To polecenie jest przydatne do testowania aplikacji na ekranach o różnej gęstości pikseli. Umożliwia ono symulowanie środowiska ekranu o wysokiej gęstości pikseli na ekranie o niskiej gęstości pikseli i odwrotnie.
Przykład: |
to-uri intent
|
Wydrukuj podaną specyfikację intencji jako identyfikator URI. Zobacz specyfikację argumentów intencji. |
to-intent-uri intent
|
Wydrukuj podaną specyfikację intencji jako identyfikator URI intent: . Zobacz specyfikację argumentów intencji. |
Specyfikacja argumentów intencji
W przypadku poleceń menedżera aktywności, które przyjmują argument intent
, możesz określić intencję za pomocą tych opcji:
Wywołaj menedżera pakietów (pm
)
W powłoce adb
możesz wydawać polecenia za pomocą narzędzia menedżera pakietów (pm
), aby wykonywać działania i zapytania dotyczące pakietów aplikacji zainstalowanych na urządzeniu.
W powłoce składnia pm
jest następująca:
pm command
Możesz też wydać polecenie menedżera pakietów bezpośrednio z adb
bez wchodzenia do zdalnej powłoki. Na przykład:
adb shell pm uninstall com.example.MyApp
Tabela 2. Dostępne polecenia menedżera pakietów
Polecenie | Opis |
---|---|
list packages [options] filter
|
Wydrukuj wszystkie pakiety, opcjonalnie tylko te, których nazwa zawiera tekst w filter . Opcje:
|
list permission-groups
|
Wydrukuj wszystkie znane grupy uprawnień. |
list permissions [options] group
|
Wydrukuj wszystkie znane uprawnienia, opcjonalnie tylko te w group . Opcje:
|
list instrumentation [options]
|
Wyświetl listę wszystkich pakietów testowych. Opcje:
|
list features
|
wydrukować wszystkie funkcje systemu; |
list libraries
|
Wydrukuj wszystkie biblioteki obsługiwane przez bieżące urządzenie. |
list users
|
wydrukować wszystkich użytkowników systemu. |
path package
|
Wydrukuj ścieżkę do pakietu APK danego package .
|
install [options] path
|
Zainstaluj w systemie pakiet określony przez path . Opcje:
|
uninstall [options] package
|
Usuwa pakiet z systemu. Opcje:
|
clear package
|
Usuwanie wszystkich danych powiązanych z pakietem. |
enable package_or_component
|
Włącz podany pakiet lub komponent (zapisany jako „pakiet/klasa”). |
disable package_or_component
|
Wyłącz podany pakiet lub komponent (zapisany jako „pakiet/klasa”). |
disable-user [options] package_or_component
|
Opcje:
|
grant package_name permission
|
Przyznaj aplikacji uprawnienia. Na urządzeniach z Androidem 6.0 (poziom interfejsu API 23) lub nowszym uprawnienia mogą być dowolnymi uprawnieniami zadeklarowanymi w pliku manifestu aplikacji. Na urządzeniach z Androidem 5.1 (API na poziomie 22) lub starszym musi to być opcjonalne uprawnienie zdefiniowane przez aplikację. |
revoke package_name permission
|
cofnąć uprawnienia aplikacji – na urządzeniach z Androidem 6.0 (poziom interfejsu API 23) lub nowszym można cofnąć dowolne uprawnienia zadeklarowane w pliku manifestu aplikacji; Na urządzeniach z Androidem 5.1 (API na poziomie 22) lub starszym musi to być opcjonalne uprawnienie zdefiniowane przez aplikację. |
set-install-location location
|
Zmień domyślną lokalizację instalacji. Wartości lokalizacji:
Uwaga: ta funkcja jest przeznaczona tylko do debugowania. Może to spowodować nieprawidłowe działanie aplikacji i inne niepożądane zachowania. |
get-install-location
|
Zwraca bieżącą lokalizację instalacji. Zwracane wartości:
|
set-permission-enforced permission [true | false]
|
Określ, czy dane uprawnienie ma być egzekwowane. |
trim-caches desired_free_space
|
przycinanie plików pamięci podręcznej, aby osiągnąć podaną ilość wolnego miejsca; |
create-user user_name
|
Utwórz nowego użytkownika z podanym user_name , drukując nowy identyfikator użytkownika.
|
remove-user user_id
|
Usuń użytkownika o podanym identyfikatorze user_id , usuwając wszystkie dane powiązane z tym użytkownikiem.
|
get-max-users
|
Wydrukuj maksymalną liczbę użytkowników obsługiwanych przez urządzenie. |
get-app-links [options] [package]
|
Wyświetla stan weryfikacji domeny dla podanego pakietu package lub dla wszystkich pakietów, jeśli nie podano żadnego. Kody stanów są zdefiniowane w ten sposób:
Dostępne opcje:
|
reset-app-links [options] [package]
|
Resetuje stan weryfikacji domeny dla danego pakietu lub dla wszystkich pakietów, jeśli nie określono żadnego.
Dostępne opcje:
|
verify-app-links [--re-verify] [package]
|
Rozsyła żądanie weryfikacji dla danego package lub dla wszystkich pakietów, jeśli nie podano żadnego. Wysyła tylko wtedy, gdy pakiet nie zarejestrował wcześniej odpowiedzi.
|
set-app-links [--package package] state domains
|
Ręczne ustawianie stanu domeny dla pakietu. Aby to działało, domena musi być zadeklarowana przez pakiet jako autoVerify. To polecenie nie zgłosi błędu w przypadku domen, których nie można zastosować.
|
set-app-links-user-selection --user user_id [--package package]
enabled domains
|
Ręczne ustawianie stanu wyboru użytkownika hosta dla pakietu. Aby to działało, domena musi być zadeklarowana przez pakiet. To polecenie nie zgłosi błędu w przypadku domen, których nie można było zastosować.
|
set-app-links-allowed --user user_id [--package package] allowed
|
Przełącz ustawienie automatycznie zweryfikowanego obsługiwania linków w przypadku pakietu.
|
get-app-link-owners --user user_id [--package package] domains
|
Wydrukuj właścicieli określonej domeny dla danego użytkownika w kolejności od najniższego do najwyższego priorytetu.
|
Wywołanie menedżera zasad dotyczących urządzeń (dpm
)
Aby ułatwić Ci tworzenie i testowanie aplikacji do zarządzania urządzeniami, wydawaj polecenia narzędziu do zarządzania zasadami dotyczącymi urządzeń (dpm
). Za pomocą tego narzędzia możesz kontrolować aktywną aplikację administratora lub zmieniać dane o stanie zasad na urządzeniu.
W powłoce składnia dpm
jest następująca:
dpm command
Możesz też wydać polecenie menedżera zasad dotyczących urządzeń bezpośrednio z adb
bez wchodzenia w zdalną powłokę:
adb shell dpm command
Tabela 3. Dostępne polecenia menedżera zasad dotyczących urządzeń
Polecenie | Opis |
---|---|
set-active-admin [options] component
|
Ustawia component jako aktywnego administratora.
Dostępne opcje:
|
set-profile-owner [options] component
|
Ustaw component jako aktywnego administratora i jego pakiet jako właściciela profilu dla istniejącego użytkownika.
Dostępne opcje:
|
set-device-owner [options] component
|
Ustaw component jako aktywnego administratora, a jego pakiet jako właściciela urządzenia.
Dostępne opcje:
|
remove-active-admin [options] component
|
Wyłączanie aktywnego administratora. Aplikacja musi zadeklarować
android:testOnly
w pliku manifestu. To polecenie usuwa też właścicieli urządzeń i profili.
Dostępne opcje:
|
clear-freeze-period-record
|
Usuń z urządzenia zapis wcześniej ustawionych okresów wstrzymania aktualizacji systemu OTA. Jest to przydatne, aby uniknąć ograniczeń harmonogramu urządzenia podczas tworzenia aplikacji, które zarządzają okresami zamrożenia. Zobacz Zarządzanie aktualizacjami systemu.
To ustawienie jest obsługiwane na urządzeniach z Androidem 9.0 (poziom interfejsu API 28) lub nowszym. |
force-network-logs
|
Wymusza przygotowanie przez system wszystkich dotychczasowych dzienników sieci do pobrania przez DPC. Jeśli dostępne są dzienniki połączeń lub DNS, DPC otrzymuje wywołanie zwrotne onNetworkLogsAvailable() . Przeczytaj więcej o rejestrowaniu aktywności sieciowej.
Częstotliwość wykonywania tego polecenia jest ograniczona. To ustawienie jest obsługiwane na urządzeniach z Androidem 9.0 (poziom interfejsu API 28) lub nowszym. |
force-security-logs
|
Wymusza udostępnienie przez system wszystkich dotychczasowych logów zabezpieczeń kontrolerowi zasad dotyczących urządzeń. Jeśli są dostępne logi, DPC otrzymuje wywołanie zwrotne onSecurityLogsAvailable() . Zobacz Rejestrowanie aktywności na urządzeniach firmowych.
Częstotliwość wykonywania tego polecenia jest ograniczona. To ustawienie jest obsługiwane na urządzeniach z Androidem 9.0 (poziom interfejsu API 28) lub nowszym. |
Zrób zrzut ekranu
Polecenie screencap
to narzędzie powłoki służące do robienia zrzutów ekranu urządzenia.
W powłoce składnia screencap
jest następująca:
screencap filename
Aby użyć screencap
z wiersza poleceń, wpisz:
adb shell screencap /sdcard/screen.png
Oto przykładowa sesja zrzutu ekranu, w której za pomocą powłoki adb
zrobiono zrzut ekranu, a za pomocą polecenia pull
pobrano plik z urządzenia:
$ adb shell shell@ $ screencap /sdcard/screen.png shell@ $ exit $ adb pull /sdcard/screen.png
Jeśli pominiesz nazwę pliku, polecenie screencap
zapisze obraz w standardowym wyjściu. W połączeniu z opcją -p
, która umożliwia określenie formatu PNG, możesz przesyłać strumieniowo zrzut ekranu urządzenia bezpośrednio do pliku na komputerze lokalnym.
Oto przykład zrobienia zrzutu ekranu i zapisania go lokalnie za pomocą jednego polecenia:
# use 'exec-out' instead of 'shell' to get raw data $ adb exec-out screencap -p > screen.png
Nagraj film
Polecenie screenrecord
to narzędzie powłoki do nagrywania ekranu urządzeń z Androidem 4.4 (poziom interfejsu API 19) lub nowszym. Narzędzie rejestruje aktywność na ekranie w pliku MPEG-4. Możesz użyć tego pliku do tworzenia filmów promocyjnych lub szkoleniowych albo do debugowania i testowania.
W powłoce użyj tej składni:
screenrecord [options] filename
Aby użyć screenrecord
z wiersza poleceń, wpisz:
adb shell screenrecord /sdcard/demo.mp4
Zatrzymaj nagrywanie ekranu, naciskając Ctrl+C. W przeciwnym razie nagrywanie zakończy się automatycznie po 3 minutach lub po upływie limitu czasu ustawionego przez --time-limit
.
Aby rozpocząć nagrywanie ekranu urządzenia, uruchom polecenie screenrecord
, aby nagrać film. Następnie uruchom polecenie pull
, aby pobrać film z urządzenia na komputer hosta. Oto przykład sesji nagrywania:
$ adb shell shell@ $ screenrecord --verbose /sdcard/demo.mp4 (press Control + C to stop) shell@ $ exit $ adb pull /sdcard/demo.mp4
Narzędzie screenrecord
może nagrywać w dowolnej obsługiwanej rozdzielczości i szybkości transmisji bitów, zachowując współczynnik proporcji wyświetlacza urządzenia. Narzędzie domyślnie nagrywa w natywnej rozdzielczości i orientacji wyświetlacza, a maksymalna długość nagrania to 3 minuty.
Ograniczenia narzędzia screenrecord
:
- Dźwięk nie jest nagrywany razem z plikiem wideo.
- Nagrywanie filmów nie jest dostępne na urządzeniach z Wear OS.
- Niektóre urządzenia mogą nie być w stanie nagrywać w natywnej rozdzielczości wyświetlacza. Jeśli masz problemy z nagrywaniem ekranu, spróbuj użyć niższej rozdzielczości.
- Obracanie ekranu podczas nagrywania nie jest obsługiwane. Jeśli podczas nagrywania ekran się obróci, część ekranu zostanie ucięta w nagraniu.
Tabela 4. Opcje: screenrecord
Opcje | Opis |
---|---|
--help
|
Wyświetlanie składni i opcji poleceń |
--size widthxheight
|
Ustaw rozmiar filmu: 1280x720 . Wartość domyślna to natywna rozdzielczość ekranu urządzenia (jeśli jest obsługiwana), a jeśli nie, to 1280 x 720. Aby uzyskać najlepsze wyniki, użyj rozmiaru obsługiwanego przez koder AVC na urządzeniu. |
--bit-rate rate |
Ustaw szybkość transmisji wideo w megabitach na sekundę. Wartość domyślna to 20 Mb/s.
Możesz zwiększyć szybkość transmisji bitów, aby poprawić jakość filmu, ale spowoduje to zwiększenie rozmiaru plików. W tym przykładzie szybkość transmisji nagrywania jest ustawiona na 6 Mb/s:
screenrecord --bit-rate 6000000 /sdcard/demo.mp4 |
--time-limit time |
Ustaw maksymalny czas nagrywania w sekundach. Wartość domyślna i maksymalna to 180 sekund (3 minuty). |
--rotate |
Obróć dane wyjściowe o 90 stopni. Ta funkcja jest eksperymentalna. |
--verbose |
Wyświetl informacje z dziennika na ekranie wiersza poleceń. Jeśli nie ustawisz tej opcji, narzędzie nie będzie wyświetlać żadnych informacji podczas działania. |
Odczytywanie profili ART aplikacji
Od Androida 7.0 (interfejs API na poziomie 24) środowisko wykonawcze Androida (ART) zbiera profile wykonania zainstalowanych aplikacji, które są używane do optymalizacji ich wydajności. Przeanalizuj zebrane profile, aby dowiedzieć się, które metody są często wykonywane i które klasy są używane podczas uruchamiania aplikacji.
Uwaga: nazwę pliku profilu wykonania można pobrać tylko wtedy, gdy masz dostęp do systemu plików na poziomie roota, np. na emulatorze.
Aby uzyskać tekstową formę informacji o profilu, użyj tego polecenia:
adb shell cmd package dump-profiles package
Aby pobrać utworzony plik, użyj tego polecenia:
adb pull /data/misc/profman/package.prof.txt
Resetowanie urządzeń testowych
Jeśli testujesz aplikację na wielu urządzeniach, warto zresetować urządzenie między testami, np. aby usunąć dane użytkownika i zresetować środowisko testowe. Możesz przywrócić ustawienia fabryczne urządzenia testowego z Androidem 10 (poziom interfejsu API 29) lub nowszym za pomocą polecenia powłoki testharness
adb
, jak pokazano poniżej:
adb shell cmd testharness enable
Podczas przywracania urządzenia za pomocą testharness
automatycznie tworzona jest kopia zapasowa klucza RSA, który umożliwia debugowanie na bieżącej stacji roboczej w trwałej lokalizacji. Oznacza to, że po zresetowaniu urządzenia stacja robocza może nadal debugować i wydawać polecenia adb
bez ręcznego rejestrowania nowego klucza.
Aby ułatwić i zabezpieczyć testowanie aplikacji, użycie testharness
do przywrócenia urządzenia spowoduje też zmianę tych ustawień urządzenia:
- Urządzenie konfiguruje niektóre ustawienia systemowe, aby nie wyświetlać początkowych kreatorów konfiguracji urządzenia. Oznacza to, że urządzenie przechodzi w stan, w którym możesz szybko zainstalować, debugować i testować aplikację.
- Ustawienia:
- Wyłącza ekran blokady.
- Wyłącza alerty o zagrożeniu.
- Wyłącza automatyczną synchronizację kont.
- Wyłącza automatyczne aktualizacje systemu.
- Inne:
- Wyłącza wstępnie zainstalowane aplikacje zabezpieczające.
Jeśli aplikacja musi wykrywać domyślne ustawienia polecenia testharness
i dostosowywać się do nich, użyj
ActivityManager.isRunningInUserTestHarness()
.
sqlite
sqlite3
uruchamia program wiersza poleceń sqlite
do sprawdzania baz danych SQLite.
Obejmuje polecenia takie jak .dump
do drukowania zawartości tabeli i .schema
do drukowania SQL CREATE
dla istniejącej tabeli.
Możesz też wykonywać polecenia SQLite z poziomu wiersza poleceń, jak pokazano poniżej:
$ adb -s emulator-5554 shell $ sqlite3 /data/data/com.example.app/databases/rssitems.db SQLite version 3.3.12 Enter ".help" for instructions
Uwaga: dostęp do bazy danych SQLite jest możliwy tylko wtedy, gdy masz dostęp do systemu plików na poziomie roota, np. na emulatorze.
Więcej informacji znajdziesz w sqlite3
dokumentacji wiersza poleceń.
Interfejsy USB adb
Serwer adb może komunikować się ze stosem USB za pomocą 2 interfejsów backendu. Może korzystać z natywnego backendu systemu operacyjnego (Windows, Linux lub macOS) albo z backendu libusb
.
Niektóre funkcje, takie jak attach
, detach
i wykrywanie prędkości USB, są dostępne tylko wtedy, gdy używasz backendu libusb
.
Możesz wybrać backend za pomocą zmiennej środowiskowej ADB_LIBUSB
.
Jeśli nie jest ustawiony, adb używa domyślnego backendu. Domyślne działanie różni się w zależności od systemu operacyjnego. Od ADB w wersji 34 w przypadku wszystkich systemów operacyjnych z wyjątkiem Windows domyślnie używany jest backend liubusb
, a w przypadku Windows domyślnie używany jest natywny backend. Jeśli ustawiona jest wartość ADB_LIBUSB
, określa ona, czy ma być używany natywny backend, czy libusb
. Więcej informacji o zmiennych środowiskowych adb znajdziesz na stronie podręcznika adb.
Backendy mDNS adb
ADB może używać protokołu DNS multicast do automatycznego łączenia serwera i urządzeń. Serwer ADB jest dostarczany z 2 backendami: Bonjour (mdnsResponder firmy Apple) i Openscreen.
Backend Bonjour wymaga, aby na komputerze hosta działał demon.
W systemie macOS wbudowany demon Apple działa zawsze, ale w systemach Windows i Linux użytkownik musi się upewnić, że demon mdnsd
jest uruchomiony.
Jeśli polecenie adb mdns check
zwróci błąd, prawdopodobnie ADB używa backendu Bonjour, ale nie działa demon Bonjour.
Backend Openscreen nie wymaga, aby na urządzeniu działał demon. Obsługa backendu Openscreen w systemie macOS zaczyna się od ADB w wersji 35. Systemy Windows i Linux są obsługiwane od wersji 34 ADB.
Domyślnie ADB używa backendu Bonjour. To zachowanie można zmienić za pomocą zmiennej środowiskowej ADB_MDNS_OPENSCREEN
(ustawionej na 1
lub 0
).
Więcej informacji znajdziesz na stronie podręcznika ADB.
Tryb seryjny adb (od wersji ADB 36.0.0)
Tryb seryjny to eksperymentalna funkcja, która umożliwia ADB ciągłe wysyłanie pakietów do urządzenia, nawet zanim urządzenie odpowie na poprzedni pakiet. Znacznie zwiększa to przepustowość ADB podczas przesyłania dużych plików, a także zmniejsza opóźnienia podczas debugowania.
Tryb zdjęć seryjnych jest domyślnie wyłączony. Aby włączyć tę funkcję, wykonaj jedną z tych czynności:
- Ustaw zmienną środowiskową
ADB_DELAYED_ACK
na1
. - W Android Studio otwórz ustawienia debugera: Plik (lub Android Studio na macOS) > Ustawienia > Kompilacja, wykonanie, wdrażanie > Debuger i ustaw Tryb seryjny serwera ADB na Włączony.