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, w której możesz uruchamiać różne polecenia na urządzeniu. Jest to program typu klient-serwer, który składa się z 3 komponentów:

  • Klient, który wysyła polecenia. Klient działa na komputerze używanym do programowania. Klienta możesz wywołać z terminala wiersza poleceń, wydając polecenie adb.
  • Usługa (adbd), która uruchamia 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 używanym do programowania.

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 przez adb, w tym o tym, jak używać 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 przez klienty adb.

Uwaga: wszystkie klienty adb używają portu 5037 do komunikacji z serwerem adb.

Serwer nawiązuje połączenia ze wszystkimi uruchomionymi 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 demona adb (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. Przykład:

Emulator 1, konsola: 5554
Emulator 1, adb: 5555
Emulator 2, konsola: 5556
Emulator 2, adb: 5557
itd.

Jak widać, emulator podłączony do 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 za pomocą 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 systemu 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 ją 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, chyba że użytkownik odblokuje urządzenie i potwierdzi okno dialogowe.

Więcej informacji o łączeniu się z urządzeniem przez USB znajdziesz w artykule Uruchamianie aplikacji na urządzeniu.

Nawiązywanie połączenia z urządzeniem przez Wi-Fi

Uwaga: poniższe instrukcje nie dotyczą urządzeń z Wear OS z Androidem 11 (API na poziomie 30). Więcej informacji znajdziesz w przewodniku po debugowaniu 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ą narzędzia 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 sterowników.

Android 17 wraz z adb 37.0.0 wprowadza adb Wi-Fi 2.0, który rozwiązuje wiele problemów z użytecznością poprzedniej wersji. Urządzenie automatycznie połączy się ze stacją roboczą, gdy połączy się z zaufaną siecią bezprzewodową do debugowania.

Zanim zaczniesz korzystać z debugowania bezprzewodowego, wykonaj te czynności:

  • Upewnij się, że stacja robocza i urządzenie są połączone z tą samą siecią bezprzewodową.

  • Upewnij się, że na urządzeniu jest zainstalowany Android 11 (API na poziomie 30) lub nowszy w przypadku telefonu albo Android 13 (API na poziomie 33) lub nowszy w przypadku telewizora i Wear OS. Więcej informacji znajdziesz w artykule Sprawdzanie i aktualizowanie wersji Androida.

  • Na stacji roboczej zaktualizuj narzędzia platformy SDK do najnowszej wersji.

Aby korzystać z 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 sparować urządzenie, wykonaj te czynności:

Uwaga: urządzenie wystarczy sparować ze stacją roboczą tylko raz. Urządzenie pozostanie sparowane ze stacją roboczą, dopóki go nie zapomnisz lub nie cofniesz autoryzacji debugowania ADB na urządzeniu. Urządzenie i stacja robocza połączą się automatycznie, gdy będą w tej samej sieci.

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

  2. Na urządzeniu kliknij Debugowanie bezprzewodowe:

    Zrzut ekranu telefonu Pixel z wyświetlonym monitem o debugowanie bezprzewodowe.
    Rysunek 1. Potwierdzenie debugowania bezprzewodowego na telefonie Google Pixel.
  3. Zezwól na debugowanie bezprzewodowe w swojej sieci. Pamiętaj, że kliknięcie pola wyboru Zawsze zezwalaj w tej sieci sprawia, że sieć staje się zaufaną siecią bezprzewodową do debugowania. Urządzenie zawsze zezwala na debugowanie bezprzewodowe w tej sieci, gdy tylko się z nią połączy.

    Zrzut ekranu telefonu Google Pixel z wyświetlonym ustawieniem debugowania bezprzewodowego.
    Rysunek 2. Ustawienie Debugowanie bezprzewodowe na telefonie Google Pixel.

    Uwaga: użytkownicy Androida Studio mogą sparować urządzenie za pomocą kodu QR. Wystarczy, że wybiorą Sparuj urządzenie za pomocą kodu QR i zeskanują kod QR uzyskany z okna dialogowego Sparuj urządzenia przez Wi-Fi w Androidzie Studio.

  4. Na urządzeniu wybierz Sparuj za pomocą kodu parowania i zanotuj adres IP, numer portu i kod parowania wyświetlane na urządzeniu.

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

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

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

    zrzut ekranu pokazujący parowanie w wierszu poleceń;
    Rysunek 3. Pojawi się komunikat informujący o pomyślnym sparowaniu urządzenia.
  8. Po sparowaniu urządzenia sprawdź, czy jest ono połączone. Możesz teraz korzystać z urządzenia bezprzewodowo, tak jak w przypadku połączenia USB.

    Aby odłączyć stację roboczą, na urządzeniu otwórz Debugowanie bezprzewodowe. Kliknij nazwę stacji roboczej w sekcji Sparowane urządzenia i wybierz Zapomnij. Możesz też kliknąć Cofnij autoryzacje debugowania ADB na stronie Ustawienia urządzenia, aby odłączyć stację roboczą i wszystkie inne wcześniej sparowane stacje robocze.

  9. Jeśli chcesz szybko włączać i wyłączać debugowanie bezprzewodowe, możesz użyć kafelków programisty w Szybkich ustawieniach dla debugowania bezprzewodowego, które znajdziesz w Opcjach programisty > Kafelki programisty w Szybkich ustawieniach.

    Zrzut ekranu przedstawiający kafelki Szybkich ustawień dla programistów na telefonie Google Pixel.
    Rysunek 4. Ustawienie Kafelki programisty w Szybkich ustawieniach umożliwia szybkie włączanie i wyłączanie debugowania bezprzewodowego.

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.

Sprawdź, czy konfiguracja adb na stacji roboczej jest prawidłowa.

Aby sprawdzić, czy konfiguracja ADB na stacji roboczej jest prawidłowa, otwórz terminal na stacji roboczej i wpisz adb server-status. Sprawdź, czy dane wyjściowe zawierają te informacje:

  • version: "37.0.0" lub nowsza: jeśli tak nie jest, pobierz najnowszą wersję narzędzi platformy SDK.
  • mdns_enabled: true: jeśli ta opcja jest ustawiona na false, adb nie będzie w stanie automatycznie wykrywać urządzeń w Twojej sieci. Aby rozwiązać ten problem, musisz ustawić zmienną środowiskową ADB_MDNS na 1, a następnie ponownie uruchomić serwer adb, wykonując polecenia adb kill-server i adb start-server.
  • mdns_backend: LIBADBMDNS: jeśli tak nie jest, adb używa przestarzałej biblioteki do automatycznego wykrywania urządzeń w Twojej sieci. Aby rozwiązać ten problem, musisz ustawić zmienną środowiskową ADB_MDNS_OPENSCREEN na 0, a następnie ponownie uruchomić serwer adb, wykonując polecenia adb kill-server i adb start-server.

Sprawdź, czy Twoja sieć obsługuje mDNS

adb korzysta z mDNS, aby automatycznie wykrywać sparowane urządzenia i się z nimi łączyć. Aby sprawdzić, czy Twoja sieć obsługuje mDNS:

  1. Na urządzeniu włącz debugowanie bezprzewodowe zgodnie z opisem w sekcji Łączenie z urządzeniem przez Wi-Fi.

  2. Na stacji roboczej otwórz terminal i wpisz adb mdns track-services --proto-text.

  3. Sprawdź, czy dane wyjściowe nie są puste i zawierają usługę TLS z adresem IP i numerem portu urządzenia. Jeśli dane wyjściowe są puste, oznacza to, że Twoja sieć nie obsługuje mDNS. Przykładowe dane wyjściowe:

    tls {
      service {
        instance: "adb-35121FDJH000R8-xyMD0H"
        service: "_adb-tls-connect._tcp"
        ipv4: "192.168.84.23"
        ipv6: "fe80:0:0:0:fc7a:299d:8d38:6c1c"
        port: 37895
        product_model: "Pixel 8"
        build_version_sdk_full: "37.0"
        given_name: "sherifeid Pixel"
        serial: "35121FDJH000R8"
        mdns_service_version: "2.0"
        hostname: "Android_CXUKYJY1.local"
      }
    }
              

Sprawdzanie, czy urządzenie obsługuje ADB Wi-Fi 2.0

Uwaga: ADB Wi-Fi 2.0 jest obsługiwane na Androidzie 17 i nowszych wersjach.

Aby sprawdzić, czy Twoje urządzenie obsługuje ADB Wi-Fi 2.0:

  1. Na urządzeniu włącz debugowanie bezprzewodowe zgodnie z opisem w sekcji Łączenie z urządzeniem przez Wi-Fi.

  2. Na stacji roboczej otwórz terminal i wpisz adb mdns track-services --proto-text.

  3. Sprawdź, czy dane wyjściowe zawierają wartość mdns_service_version: "2.0" lub wyższą. Jeśli tak nie jest, oznacza to, że na urządzeniu nie ma Androida 17 lub nowszego i nie obsługuje ono ADB Wi-Fi 2.0. Aby zaktualizować system do Androida 17 lub nowszego, sprawdź, czy na urządzeniu nie ma oczekujących aktualizacji systemu. Sprawdzanie i aktualizowanie wersji Androida

Zgłaszanie nowego problemu

Jeśli nadal masz problemy z bezprzewodowym połączeniem z urządzeniem, możesz zgłosić nowy problem. W zgłoszeniu podaj te informacje:

  • Dzienniki z urządzenia: odtwórz problem i dołącz dzienniki urządzenia.
  • Dzienniki z adb na stacji roboczej:
    1. Ustaw zmienną środowiskową ADB_TRACE=all.
    2. Uruchom ponownie serwer adb, wpisując adb kill-server, a potem adb start-server.
    3. Odtwórz problem.
    4. Znajdź pliki dziennika: uruchom adb server-status i załącz plik dziennika, do którego odwołuje się wynik log_absolute_path.

Połączenie bezprzewodowe z urządzeniem po pierwszym połączeniu przez USB (jedyna opcja dostępna na Androidzie 10 i starszych wersjach)

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. Może być konieczne użycie punktu dostępu, którego zapora sieciowa jest prawidłowo skonfigurowana pod kątem 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 host 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:

  • Sprawdź, czy host jest nadal połączony 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 te 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 podczas uruchamiania systemu. 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. Ta informacja jest przydatna, gdy masz podłączonych wiele urządzeń, ponieważ pozwala je odróżnić.

Poniższy przykład pokazuje polecenie devices i jego wynik. 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

Brak emulatora na liście

Polecenie adb devices ma sekwencję poleceń w przypadku, gdy uruchomione emulatory nie są widoczne w danych wyjściowych adb devices, mimo że są widoczne na pulpicie. Dzieje się tak, gdy wszystkie z tych warunków są spełnione:

  • Serwer adb nie działa.
  • Użyj polecenia emulator z opcją -port lub -ports i nieparzystą wartością portu z zakresu 5554–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 on 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.

Aby uniknąć tej sytuacji, możesz pozwolić emulatorowi wybrać własne porty i uruchamiać 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 tej sekwencji poleceń adb devices wyświetla listę urządzeń, ponieważ serwer adb został uruchomiony jako pierwszy.

Aby zobaczyć emulator w danych wyjściowych polecenia 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 w wierszu 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ć miejsce docelowe:

  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 zamiast tego ustawić zmienną środowiskową $ANDROID_SERIAL, aby zawierała numer seryjny.
    2. Jeśli używasz zarówno -s, jak i $ANDROID_SERIAL, -s zastępuje $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 helloWorld.apk na tym urządzeniu:

$ 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 wysłać polecenia do emulatora. Jeśli jest wiele urządzeń, ale tylko jedno urządzenie sprzętowe jest podłączone, użyj opcji -d, aby wysyłać polecenia do urządzenia sprzętowego.

Instalowanie aplikacji

Możesz użyć adb, aby zainstalować plik APK na emulatorze lub podłączonym urządzeniu za pomocą polecenia install:

adb install path_to_apk

Podczas instalowania testowego pliku APK musisz użyć opcji -t z poleceniem install. Więcej informacji znajdziesz -t.

Aby zainstalować kilka plików APK, użyj 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ć bezpośrednio polecenia adb, 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 demonach rejestrujących system 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 niego. W odróżnieniu od polecenia install, które kopiuje plik APK tylko 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 używanym do programowania (lokalnym) i na urządzeniu (zdalnym). Przykład:

adb push myfile.txt /sdcard/myfile.txt

Zatrzymywanie serwera adb

W niektórych przypadkach, aby rozwiązać problem, może być konieczne zakończenie procesu serwera adb i ponowne uruchomienie go. Może to nastąpić 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 używanym do programowania lub ze skryptu, używając tych elementów:

adb [-d | -e | -s serial_number] command

Jeśli działa tylko 1 emulator lub podłączone jest tylko 1 urządzenie, polecenie adb jest domyślnie wysyłane do tego urządzenia. Jeśli działa kilka emulatorów lub jest podłączonych kilka 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ć jedno polecenie, użyj polecenia shell w ten sposób:

adb [-d |-e | -s serial_number] shell shell_command

Aby uruchomić na urządzeniu powłokę interaktywną, 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 narzędziach platformy Androida w wersji 23 i nowszych polecenie 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 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 adbpowłoce 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 adbbez wchodzenia do powłoki zdalnej. 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: Zaczekaj na zakończenie uruchamiania.
  • --start-profiler file: uruchom profiler i wyślij wyniki do file.
  • -P file: podobny do --start-profiler, ale profilowanie zatrzymuje się, gdy aplikacja przechodzi w stan bezczynności.
  • -R count: Powtórz uruchomienie aktywności count razy. Przed każdym powtórzeniem zakończy się górna aktywność.
  • -S: wymuś zatrzymanie aplikacji docelowej przed rozpoczęciem działania.
  • --opengl-trace: włącz śledzenie funkcji OpenGL.
  • --user user_id | current: Określ użytkownika, w imieniu którego ma być uruchomiony proces. Jeśli nie podasz żadnego użytkownika, proces zostanie uruchomiony w imieniu bieżącego użytkownika.
  • --debug-link: (Android 17 i nowsze wersje) diagnozowanie rozpoznawania adresów URL i intencji w przypadku linków do aplikacji, drukowanie pasujących filtrów intencji w pliku manifestu i reguł dynamicznych linków do aplikacji.
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ć uruchomiony proces. 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 którego użytkownika mają zostać zakończone. Jeśli nie zostanie podany, wszystkie procesy użytkowników zostaną zakończone.
kill-all Zakończ wszystkie procesy działające 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 chcesz wysłać wiadomość. Jeśli nie określisz tego parametru, wyślemy powiadomienie 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 poczekaj na zakończenie instrumentacji. Wymagane w przypadku programów do testowania.
  • --no-window-animation: wyłącz animacje okien podczas działania.
  • --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 bieżącym użytkowniku.
profile start process file Uruchom profiler w process i zapisz wyniki w file.
profile stop process Zatrzymaj profiler na process.
dumpheap [options] process file Zrzucaj stertę process, zapisuj 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 karty graficznej (poziom interfejsu API 35 i wyższy). Opcjonalnie możesz określić format, w którym ma zostać wygenerowany zrzut (domyślnie PNG).
  • -n: zrzucanie natywnej sterty zamiast zarządzanej sterty.
dumpbitmaps [options] [-p process] Zrzucanie informacji o bitmapie z process (poziom API 36 i wyższy).

Dostępne opcje:

  • -d|--dump [format]: zrzuca zawartość bitmapy do określonego format, który może być jednym z tych formatów: png, jpg lub webp. Jeśli nie zostanie podany żaden format, 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 process, zrzucane będą mapy bitowe ze wszystkich procesów.
set-debug-app [options] package Ustaw aplikację package na debugowanie.

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 i błędów ANR.

Dostępne opcje:

  • --gdb: uruchom gdbserv na danym porcie w momencie awarii lub błędu ANR.
screen-compat {on | off} package Steruj trybem zgodności ekranu urządzenia package.
display-size [reset | widthxheight] Zastąp rozmiar interfejsu 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ść ekranu 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 intent: URI.

Zobacz specyfikację argumentów intencji.

memory-limiter subcommand [options]

Dostosowywanie lub wyłączanie limitów pamięci na urządzeniach z Androidem 17 lub nowszym. Nie ma wpływu na urządzenia z Androidem 16 i starszymi wersjami.

Podpolecenia:

  • ignore uid|none|all: nakazuje ogranicznikowi pamięci ignorowanie niektórych lub wszystkich procesów. Przekazanie identyfikatora UID (identyfikatora użytkownika Androida) powoduje, że ogranicznik pamięci ignoruje egzekwowanie limitu we wszystkich procesach powiązanych z tym identyfikatorem. Możesz też przekazać wartość all (ignoruj wszystkie aplikacje) lub none (nie ignoruj żadnych aplikacji). Przekazanie wartości none zastępuje wszystkie poprzednie wywołania funkcji am memory-limiter ignore.

    Jeśli polecisz ogranicznikowi pamięci zignorować identyfikator UID, nadal możesz ręcznie zastosować limit pamięci do procesu w aplikacji, wywołując funkcję am memory-limiter manual.

  • manual pid limit|max|none: nakazuje systemowi nałożenie ograniczenia pamięci na proces o określonym identyfikatorze PID (identyfikatorze procesu). Ograniczenie pamięci jest podawane jako liczba całkowita w MB. Na przykład wartość 30 oznacza, że proces jest ograniczony do 30 MB pamięci. Przekazanie wartości max usuwa wszystkie limity pamięci w tym procesie. Przekazanie wartości none spowoduje usunięcie wszystkich ręcznie ustawionych limitów procesu i przywrócenie domyślnego limitu systemu (jeśli taki istnieje).
  • status: Raportuje bieżący stan ogranicznika pamięci. Stan obejmuje limity pamięci nałożone na widoczne i niewidoczne procesy.

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łanie menedżera pakietów (pm)

W powłoce adb możesz wydawać polecenia za pomocą narzędzia do zarządzania pakietami (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. 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 innych firm.
  • -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 Wyświetl wszystkie znane grupy uprawnień.
list permissions [options] group Wyświetl 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 Wydrukuj wszystkie funkcje systemu.
list libraries Wydrukuj wszystkie biblioteki obsługiwane przez bieżące urządzenie.
list users Wyświetl wszystkich użytkowników w systemie.
path package Wydrukuj ścieżkę do pliku APK danego package.
install [options] path Zainstaluj w systemie pakiet określony przez path.

Opcje:

  • -r: ponowne zainstalowanie istniejącej aplikacji z zachowaniem jej danych.
  • -t: zezwalaj na instalowanie testowych pakietów APK. Gradle generuje testowy plik APK, gdy uruchomisz lub debugujesz aplikację albo użyjesz w Androidzie Studio polecenia Build > Build APK (Skompiluj > Skompiluj plik 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 urządzenia.
  • --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 urządzenia.
    • 2: zainstalować 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: Szybko aktualizuj zainstalowany pakiet, aktualizując tylko zmienione 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 plików 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 Usuń wszystkie dane powiązane 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 może to być dowolne uprawnienie zadeklarowane w pliku manifestu aplikacji. Na urządzeniach z Androidem 5.1 (API na poziomie 22) i starszym musi to być uprawnienie opcjonalne zdefiniowane przez aplikację.
revoke package_name permission cofnąć uprawnienia aplikacji – na urządzeniach z Androidem 6.0 (poziom interfejsu API 23) lub nowszym może to być dowolne uprawnienie zadeklarowane w pliku manifestu aplikacji; Na urządzeniach z Androidem 5.1 (API na poziomie 22) i starszym musi to być uprawnienie opcjonalne 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 urządzenia
  • 2 [external]: Instalacja 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: wymuszone zatwierdzenie, 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 weryfikator z nieznanego powodu
  • system_configured: automatycznie zatwierdzony 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 są weryfikowane automatycznie.
reset-app-links [options] [package]

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

  • package: pakiet do zresetowania lub „all” (wszystkie pakiety)

Dostępne opcje:

  • --user user_id: uwzględniać wybory użytkownika; Uwzględnij wszystkie domeny, nie tylko te, które są weryfikowane automatycznie.
verify-app-links [--re-verify] [package]

Rozsyła żądanie weryfikacji dla danego pakietu package lub dla wszystkich pakietów, jeśli nie określono żadnego. Wysyłane tylko wtedy, gdy pakiet nie zarejestrował wcześniej odpowiedzi.

  • --re-verify: wysyłaj 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 pakiety)
  • state: kod, który ma być ustawiony dla domen. Prawidłowe wartości:
    • 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 jej zmianę.
    • STATE_DENIED (3): traktuj domenę jako zawsze odrzuconą, co uniemożliwia agentowi weryfikacji domeny zmianę tego stanu.
  • 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ć wybory.
  • --package package: pakiet do ustawienia;
  • enabled: czy zatwierdzić domenę.
  • domains: lista domen do zmiany oddzielonych spacjami lub „all” (wszystkie domeny)
set-app-links-allowed --user user_id [--package package] allowed

Przełącz ustawienie automatycznie zweryfikowanego linku dla pakietu.

  • --user user_id: użytkownik, dla którego chcesz zmienić wybory.
  • --package package: pakiet do ustawienia lub „all” (wszystkie), aby ustawić wszystkie pakiety. Jeśli nie określono pakietu, pakiety zostaną zresetowane.
  • 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 wysłać zapytanie
  • --package package: opcjonalnie możesz też wydrukować wszystkie domeny internetowe zadeklarowane przez pakiet lub „wszystkie”, aby wydrukować wszystkie pakiety.
  • domains: lista domen rozdzielonych spacjami, dla których 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 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 do powłoki zdalnej:

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ć --user current, aby wybrać bieżącego użytkownika.
set-profile-owner [options] component Ustaw aplikację component jako aktywnego administratora i jej 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ć --user current, aby wybrać bieżącego użytkownika.
  • --name name: Podaj zrozumiałą dla człowieka nazwę organizacji.
set-device-owner [options] component Ustaw component jako aktywnego administratora i jego pakiet jako właściciela urządzenia.

Dostępne opcje:

  • --user user_id: określ użytkownika docelowego. Możesz też przekazać --user current, aby wybrać bieżącego użytkownika.
  • --name name: Podaj zrozumiałą dla człowieka nazwę organizacji.
remove-active-admin [options] component Wyłączanie aktywnego administratora. Aplikacja musi deklarować android:testOnly w pliku manifestu. To polecenie usuwa też właścicieli urządzenia i profilu.

Dostępne opcje:

  • --user user_id: określ użytkownika docelowego. Możesz też przekazać --user current, aby wybrać bieżącego użytkownika.
clear-freeze-period-record Usuń z urządzenia zapis wcześniej ustawionych okresów zamrożenia aktualizacji OTA systemu. Jest to przydatne, aby uniknąć ograniczeń harmonogramu urządzenia podczas tworzenia aplikacji, które zarządzają okresami zamrożenia. Zobacz Zarządzanie aktualizacjami systemu.

Obsługiwane na urządzeniach z Androidem 9.0 (poziom interfejsu API 28) i nowszym.

force-network-logs Wymusza przygotowanie przez system wszystkich dotychczasowych dzienników sieci do pobrania przez dostawcę zasad dotyczących urządzeń. Jeśli dostępne są dzienniki połączeń lub DNS, DPC otrzymuje wywołanie zwrotne onNetworkLogsAvailable(). Zobacz Rejestrowanie aktywności sieciowej.

Częstotliwość używania tego polecenia jest ograniczona. Obsługiwane na urządzeniach z Androidem 9.0 (poziom interfejsu API 28) i nowszym.

force-security-logs Wymusza udostępnienie przez system wszystkich dotychczasowych logów zabezpieczeń do DPC. Jeśli są dostępne logi, DPC otrzymuje wywołanie zwrotne onSecurityLogsAvailable(). Zobacz Rejestrowanie aktywności na urządzeniu firmowym.

Częstotliwość używania tego polecenia jest ograniczona. Obsługiwane na urządzeniach z Androidem 9.0 (poziom interfejsu API 28) i 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 poziomu wiersza poleceń, wpisz:

adb shell screencap /sdcard/screen.png

Oto przykładowa sesja zrzutu ekranu, w której za pomocą powłoki adb wykonano 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, 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 wyświetlacza 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 poziomu wiersza poleceń, wpisz:

adb shell screenrecord /sdcard/demo.mp4

Zatrzymaj nagrywanie ekranu, naciskając Control+C. W przeciwnym razie nagrywanie zatrzyma 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 nagraniowej:

$ 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, o którą poprosisz, 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 obsługiwać nagrywania w natywnej rozdzielczości wyświetlacza. Jeśli masz problemy z nagrywaniem ekranu, spróbuj użyć niższej rozdzielczości ekranu.
  • Obracanie ekranu podczas nagrywania nie jest obsługiwane. Jeśli podczas nagrywania ekran się obróci, część ekranu zostanie odcięta w nagraniu.

Tabela 4. screenrecord opcji

Opcje Opis
--help Wyświetlanie składni i opcji polecenia
--size widthxheight Ustaw rozmiar filmu: 1280x720. Wartość domyślna to natywna rozdzielczość wyświetlacza 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 Advanced Video Coding (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.

Odczyt 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 wydajności aplikacji. Sprawdź zebrane profile, aby dowiedzieć się, które metody są często wykonywane, a 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 kilku urządzeniach, warto zresetować urządzenie między testami, np. aby usunąć dane użytkownika i zresetować środowisko testowe. Możesz zresetować urządzenie testowe 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 urządzenie automatycznie tworzy kopię zapasową klucza RSA, który umożliwia debugowanie za pomocą 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 powoduje też zmianę tych ustawień urządzenia:

  • Urządzenie konfiguruje niektóre ustawienia systemowe, aby nie wyświetlać początkowych kreatorów konfiguracji. 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 wydrukowania zawartości tabeli i .schema do wydrukowania instrukcji SQL CREATE dla istniejącej tabeli. Polecenia SQLite możesz też wykonywać 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 wchodzić w interakcje ze stosem USB za pomocą 2 backendów. 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. Począwszy od ADB w wersji 34, w przypadku wszystkich systemów operacyjnych z wyjątkiem Windows domyślnie używany jest backend libusb. W systemie Windows domyślnie używany jest natywny backend. Jeśli ustawiono ADB_LIBUSB, określa, czy ma być używany backend natywny czy libusb. Więcej informacji o zmiennych środowiskowych adb znajdziesz na stronie podręcznika adb.

Backendy mDNS adb

ADB używa protokołu mDNS (multicast DNS) do automatycznego łączenia serwera i urządzeń na potrzeby debugowania bezprzewodowego. Od wersji 37 serwer ADB jest dostarczany z 2 backendami mDNS: libadbmdns i openscreen.

Domyślnym i zalecanym backendem jest libadbmdns. To zachowanie można zmienić za pomocą zmiennej środowiskowej ADB_MDNS_OPENSCREEN (ustawionej na 1 lub 0). Obsługa backendu Openscreen w systemie macOS jest dostępna od wersji ADB 35. Systemy Windows i Linux są obsługiwane od wersji ADB 34.

Tryb seryjny ADB (od wersji ADB 36.0.0)

Tryb seryjny to eksperymentalna funkcja, która umożliwia ADB wysyłanie pakietów do urządzenia, zanim to 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_BURST_MODE na 1.
  • W Android Studio otwórz ustawienia debugera, klikając Plik (lub Android Studio na macOS) > Ustawienia > Kompilacja, wykonanie, wdrażanie > Debuger i ustaw Tryb seryjny serwera ADB na Włączony.