Android Debug Bridge (adb)

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 adbdemona (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:

  1. Włącz opcje programisty na urządzeniu.

  2. Otwórz Android Studio i w menu konfiguracji uruchamiania wybierz Pair Devices Using Wi-Fi (Parowanie urządzeń przez Wi-Fi).

    Menu konfiguracji uruchamiania
    Rysunek 1. Menu konfiguracji uruchamiania.

    Pojawi się okno Sparuj urządzenia przez Wi-Fi, jak pokazano na rysunku 2.

    Zrzut ekranu wyskakującego okienka „Sparuj urządzenia przez Wi-Fi”
    Rysunek 2. Wyskakujące okienko do parowania urządzeń przy użyciu kodu QR lub kodu parowania.
  3. Na urządzeniu kliknij Debugowanie bezprzewodowe i sparuj urządzenie:

    Zrzut ekranu telefonu Pixel z ustawieniem systemów debugowania bezprzewodowego.
    Rysunek 3. Zrzut ekranu ustawienia Debugowanie bezprzewodowe na telefonie Google Pixel.
    1. 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.

    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.

      Zrzut ekranu z przykładem wpisywania kodu PIN
      Rysunek 4. Przykład wpisywania 6-cyfrowego kodu.
  4. 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.

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

    Zrzut ekranu z kafelkami szybkich ustawień dla programisty na telefonie Google Pixel.
    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:

  1. Włącz opcje programisty na urządzeniu, jak opisano wcześniej.

  2. Włącz na urządzeniu Debugowanie bezprzewodowe, jak opisano wcześniej.

  3. Na stacji roboczej otwórz okno terminala i przejdź do katalogu android_sdk/platform-tools.

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

  5. W terminalu stacji roboczej uruchom polecenie adb pair ipaddr:port. Użyj adresu IP i numeru portu podanych powyżej.

  6. Gdy pojawi się prośba, wpisz kod parowania, jak pokazano poniżej.

    Zrzut ekranu z parowaniem w wierszu poleceń.
    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:

  1. Połącz urządzenie z Androidem i adbkomputer hosta z tą samą siecią Wi-Fi.
  2. 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.

  3. Podłącz urządzenie do komputera hosta za pomocą kabla USB.
  4. Skonfiguruj urządzenie docelowe tak, aby nasłuchiwało połączenia TCP/IP na porcie 5555:
    adb tcpip 5555
    
  5. Odłącz kabel USB od urządzenia docelowego.
  6. 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.
  7. Połącz się z urządzeniem za pomocą adresu IP:
    adb connect device_ip_address:5555
    
  8. Sprawdź, czy komputer hosta jest połączony z urządzeniem docelowym:
    $ adb devices
    List of devices attached
    device_ip_address:5555 device
    

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 serwerem adb. Pamiętaj, że ten stan nie oznacza, że system Android jest w pełni uruchomiony i działa, ponieważ urządzenie łączy się z adb, 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, polecenie devices 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:

  1. Użyj polecenia devices, aby uzyskać numer seryjny urządzenia docelowego.
  2. Gdy uzyskasz numer seryjny, użyj opcji -s z poleceniami adb, aby go określić.
    1. Jeśli zamierzasz wydać wiele poleceń adb, możesz ustawić zmienną środowiskową $ANDROID_SERIAL, aby zawierała numer seryjny.
    2. 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.

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ń pullpush, 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 pullpush 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 localremote ś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

adbpowł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:

  • -D: włącz debugowanie.
  • -W: poczekaj na zakończenie uruchamiania.
  • --start-profiler file: Uruchom program profilujący i wyślij wyniki do file.
  • -P file: podobnie jak --start-profiler, ale profilowanie zatrzymuje się, gdy aplikacja jest nieaktywna.
  • -R count: Powtórz uruchomienie aktywności count razy. Przed każdym powtórzeniem zakończy się pierwsze działanie.
  • -S: przed rozpoczęciem aktywności wymuś zatrzymanie aplikacji docelowej.
  • --opengl-trace: włącz śledzenie funkcji OpenGL.
  • --user user_id | current: określ, jako który użytkownik ma być uruchamiany skrypt. Jeśli nie podasz tej wartości, skrypt zostanie uruchomiony jako bieżący użytkownik.
startservice [options] intent Uruchom Service określony przez intent.

Zobacz specyfikację argumentów intencji.

Dostępne opcje:

  • --user user_id | current: określ użytkownika, w imieniu którego ma być uruchomione działanie. Jeśli nie zostanie określony, zostanie uruchomiony jako bieżący użytkownik.
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:

  • --user user_id | all | current: określa procesy użytkownika, które mają zostać zakończone. Jeśli nie zostanie określony, wszystkie procesy użytkowników zostaną zakończone.
kill-all Zakończ wszystkie procesy w tle.
broadcast [options] intent Wysyłanie intencji transmisji.

Zobacz specyfikację argumentów intencji.

Dostępne opcje:

  • [--user user_id | all | current]: określ użytkownika, do którego ma zostać wysłana wiadomość. Jeśli nie określisz wartości tego pola, wiadomość zostanie wysłana do wszystkich użytkowników.
instrument [options] component Rozpocznij monitorowanie za pomocą instancji Instrumentation. Zwykle celem component jest formularz test_package/runner_class.

Dostępne opcje:

  • -r: drukuje nieprzetworzone wyniki (w przeciwnym razie dekoduje report_key_streamresult). Używaj z parametrem [-e perf true], aby generować nieprzetworzone dane wyjściowe na potrzeby pomiarów wydajności.
  • -e name value: ustaw argument name na value. W przypadku narzędzi do testowania powszechną formą jest -e testrunner_flag value[,value...].
  • -p file: zapisywanie danych profilowania w file.
  • -w: przed zwróceniem wyniku poczekaj na zakończenie instrumentacji. Wymagane w przypadku programów do uruchamiania testów.
  • --no-window-animation: wyłączanie animacji okien podczas biegu.
  • --user user_id | current: określ, w którym środowisku ma działać instrumentacja użytkownika. Jeśli nie zostanie określony, zostanie uruchomiony w imieniu bieżącego użytkownika.
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:

  • --user [user_id | current]: Podając nazwę procesu, określ użytkownika procesu, którego zrzut chcesz utworzyć. Jeśli nie zostanie określony, użyty zostanie bieżący użytkownik.
  • -b [| png | jpg | webp]: zrzucanie bitmap z pamięci graficznej (poziom API 35 lub wyższy). Opcjonalnie określ format, w którym ma zostać wygenerowany zrzut (domyślnie PNG).
  • -n: zrzut natywnego stosu zamiast zarządzanego stosu.
dumpbitmaps [options] [-p process] Zrzucanie informacji o mapie bitowej z process (poziom interfejsu API 36 i nowszy).

Dostępne opcje:

  • -d|--dump [format]: zrzuca zawartość mapy bitowej do określonego format, który może być jednym z tych formatów: png, jpg lub webp. Jeśli nie podasz żadnego formatu, domyślnie używany jest format png. Zostanie utworzony plik ZIP dumpbitmaps-<time>.zip z mapami bitowymi.
  • -p process: zrzucanie bitmap z process, można określić wiele -p process.
Jeśli nie podasz żadnego process, zostaną zrzucone mapy bitowe ze wszystkich procesów.
set-debug-app [options] package Ustaw aplikację package do debugowania.

Dostępne opcje:

  • -w: Czekaj na debuger po uruchomieniu aplikacji.
  • --persistent: zachowaj tę wartość.
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:

  • --gdb: rozpocznij gdbserv na danym porcie w momencie awarii lub błędu ANR.
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:
am display-size 1280x800

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:
am display-density 480

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:

  • -f: Zobacz powiązany plik.
  • -d: filtruj, aby wyświetlać tylko wyłączone pakiety.
  • -e: Filtruj, aby wyświetlać tylko włączone pakiety.
  • -s: Filtruj, aby wyświetlać tylko pakiety systemowe.
  • -3: filtruj, aby wyświetlać tylko pakiety firm zewnętrznych.
  • -i: Zobacz instalator pakietów.
  • -u: uwzględnij odinstalowane pakiety.
  • --user user_id: przestrzeń użytkownika, w której ma zostać wykonane zapytanie.
list permission-groups Wydrukuj wszystkie znane grupy uprawnień.
list permissions [options] group Wydrukuj wszystkie znane uprawnienia, opcjonalnie tylko te w group.

Opcje:

  • -g: Porządkuj według grupy.
  • -f: wydrukuj wszystkie informacje.
  • -s: krótkie podsumowanie.
  • -d: Wyświetlaj tylko uprawnienia niebezpieczne.
  • -u: Wymień tylko uprawnienia, które będą widoczne dla użytkowników.
list instrumentation [options] Wyświetl listę wszystkich pakietów testowych.

Opcje:

  • -f: podaj plik APK pakietu testowego.
  • target_package: wyświetla listę pakietów testowych tylko dla tej aplikacji.
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:

  • -r: ponowna instalacja istniejącej aplikacji z zachowaniem jej danych.
  • -t: zezwalaj na instalowanie testowych plików APK. Gradle generuje testowy plik APK, gdy uruchomisz lub debugujesz aplikację albo użyjesz w Android Studio polecenia Build > Build APK (Utwórz > Utwórz APK). Jeśli plik APK został utworzony przy użyciu pakietu SDK w wersji przedpremierowej dla programistów, musisz dołączyć opcję -t z poleceniem install, jeśli instalujesz testowy plik APK.
  • -i installer_package_name: podaj nazwę pakietu instalacyjnego.
  • --user user_id: określ użytkownika, dla którego ma zostać zainstalowany pakiet. Domyślnie pakiet jest instalowany dla wszystkich użytkowników na urządzeniu.
  • --install-location location: ustaw lokalizację instalacji, używając jednej z tych wartości:
    • 0: użyj domyślnej lokalizacji instalacji.
    • 1: zainstaluj w pamięci wewnętrznej urządzenia.
    • 2: zainstaluj na nośniku zewnętrznym.
  • -f: zainstaluj pakiet w pamięci wewnętrznej systemu.
  • -d: zezwalaj na starszą wersję kodu.
  • -g: przyznaj wszystkie uprawnienia wymienione w pliku manifestu aplikacji.
  • --fastdeploy: szybkie aktualizowanie zainstalowanego pakietu przez aktualizowanie tylko zmienionych części pliku APK.
  • --incremental: instaluje wystarczającą część pliku APK, aby uruchomić aplikację, a pozostałe dane przesyła strumieniowo w tle. Aby korzystać z tej funkcji, musisz podpisać plik APK, utworzyć plik schematu podpisu APK w wersji 4 i umieścić go w tym samym katalogu co plik APK. Ta funkcja jest obsługiwana tylko na niektórych urządzeniach. Ta opcja wymusza użycie funkcji przez adb lub zgłasza błąd, jeśli funkcja nie jest obsługiwana, z dokładnymi informacjami o przyczynie błędu. Dołącz opcję --wait, aby poczekać, aż plik APK zostanie w pełni zainstalowany, zanim przyznasz do niego dostęp.

    --no-incremental uniemożliwia adb korzystanie z tej funkcji.

uninstall [options] package Usuwa pakiet z systemu.

Opcje:

  • -k: zachowaj katalogi danych i pamięci podręcznej po usunięciu pakietu.
  • --user user_id: określa użytkownika, dla którego pakiet jest usuwany. Domyślnie pakiet jest usuwany u wszystkich użytkowników urządzenia.
  • --versionCode version_code: odinstalowuje aplikację tylko wtedy, gdy ma ona podany kod wersji.
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:

  • --user user_id: użytkownik, którego chcesz wyłączyć.
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:
  • 0: Automatycznie: pozwól systemowi wybrać najlepszą lokalizację.
  • 1: Wewnętrzna: instalacja w pamięci wewnętrznej urządzenia.
  • 2: Zewnętrzny: instalacja na nośniku zewnętrznym.

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:
  • 0 [auto]: Pozwól systemowi wybrać najlepszą lokalizację
  • 1 [internal]: Zainstaluj w pamięci wewnętrznej urządzenia
  • 2 [external]: Instalowanie na nośniku zewnętrznym
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:

  • none: w przypadku tej domeny nie zarejestrowano żadnych danych
  • verified: domena została zweryfikowana.
  • approved: zatwierdzony na siłę, zwykle za pomocą powłoki
  • denied: wymuszone odrzucenie, zwykle za pomocą powłoki
  • migrated: zachowana weryfikacja z odpowiedzi starszego typu.
  • restored: zachowana weryfikacja z przywróconych danych użytkownika
  • legacy_failure: odrzucone przez starszy system weryfikacji, nieznana przyczyna
  • system_configured: automatycznie zatwierdzona przez konfigurację urządzenia
  • >= 1024: niestandardowy kod błędu, który jest specyficzny dla weryfikatora urządzenia.

Dostępne opcje:

  • --user user_id: uwzględniać wybory użytkownika; Uwzględnij wszystkie domeny, nie tylko te, które zostały zweryfikowane automatycznie.
reset-app-links [options] [package]

Resetuje stan weryfikacji domeny dla danego pakietu lub dla wszystkich pakietów, jeśli nie określono żadnego.

  • package: pakiet do zresetowania lub „all”, aby zresetować wszystkie pakiety

Dostępne opcje:

  • --user user_id: uwzględniać wybory użytkownika; Uwzględnij wszystkie domeny, nie tylko te, które zostały zweryfikowane automatycznie.
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.

  • --re-verify: wysyłanie nawet wtedy, gdy pakiet zarejestrował odpowiedź
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ć.

  • --package package: pakiet do ustawienia lub „all” (wszystkie), aby ustawić wszystkie pakiety.
  • state: kod, który ma być ustawiony dla domen. Prawidłowe wartości to:
    • STATE_NO_RESPONSE (0): zresetuj tak, jakby nigdy nie zarejestrowano odpowiedzi.
    • STATE_SUCCESS (1): traktuj domenę jako zweryfikowaną przez agenta weryfikacji domeny. Pamiętaj, że agent weryfikacji domeny może zastąpić to ustawienie.
    • STATE_APPROVED (2): traktuj domenę jako zawsze zatwierdzoną, co uniemożliwia agentowi weryfikacji domeny zmianę tego ustawienia.
    • STATE_DENIED (3): traktuj domenę jako zawsze odrzuconą, co uniemożliwia agentowi weryfikacji domeny zmianę tego ustawienia.
  • domains: lista domen do zmiany oddzielonych spacjami lub „all” (wszystkie domeny).
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ć.

  • --user user_id: użytkownik, dla którego chcesz zmienić wybór.
  • --package package: pakiet do ustawienia
  • enabled: czy zatwierdzić domenę,
  • domains: lista domen do zmiany oddzielonych spacjami lub „all”, aby zmienić wszystkie domeny
set-app-links-allowed --user user_id [--package package] allowed

Przełącz ustawienie automatycznie zweryfikowanego obsługiwania linków w przypadku pakietu.

  • --user user_id: użytkownik, dla którego chcesz zmienić wybór.
  • --package package: pakiet do ustawienia lub „all” (wszystkie), aby ustawić wszystkie pakiety; pakiety zostaną zresetowane, jeśli nie określono żadnego pakietu
  • allowed: true, aby zezwolić pakietowi na otwieranie automatycznie zweryfikowanych linków, false, aby wyłączyć
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.

  • --user user_id: użytkownik, o którego chcesz wykonać zapytanie.
  • --package package: opcjonalnie możesz też wydrukować wszystkie domeny internetowe zadeklarowane przez pakiet lub „all” (wszystkie), aby wydrukować wszystkie pakiety.
  • domains: lista domen oddzielonych spacjami, o które chcesz wysłać zapytanie

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 dpmjest 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:

  • --user user_id: określ użytkownika docelowego. Możesz też przekazać wartość --user current, aby wybrać bieżącego użytkownika.
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:

  • --user user_id: określ użytkownika docelowego. Możesz też przekazać wartość --user current, aby wybrać bieżącego użytkownika.
  • --name name: podaj czytelną dla użytkownika nazwę organizacji.
set-device-owner [options] component Ustaw component jako aktywnego administratora, a jego pakiet jako właściciela urządzenia.

Dostępne opcje:

  • --user user_id: określ użytkownika docelowego. Możesz też przekazać wartość --user current, aby wybrać bieżącego użytkownika.
  • --name name: podaj czytelną dla użytkownika nazwę organizacji.
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:

  • --user user_id: określ użytkownika docelowego. Możesz też przekazać wartość --user current, aby wybrać bieżącego użytkownika.
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 sqlite3dokumentacji 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 na 1.
  • 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.