Jak uruchomić aplikację za pomocą narzędzi Android ADB?

Odpowiedzi:

630
adb shell
am start -n com.package.name/com.package.name.ActivityName

Lub możesz użyć tego bezpośrednio:

adb shell am start -n com.package.name/com.package.name.ActivityName

Możesz również określić akcje, które mają być filtrowane według filtrów zamiarów:

am start -a com.example.ACTION_NAME -n com.package.name/com.package.name.ActivityName 
Cristian
źródło
23
Dziękuję bardzo, wprowadziłem funkcję powłoki w ~ / .bash_profile, aby była znacznie szybsza function androidrun(){ ant clean debug adb shell am start -n $1/$1.MainActivity }i jej użycieandroidrun com.example.test
AbdullahDiaa
3
adb shell ampoda ci listę innych opcji do przekazania do ampolecenia. Możesz dowiedzieć się więcej na stronie developer.android.com/tools/help/adb.html#am
Ehtesh Choudhury
1
@shurane Jak mogę znaleźć opcję -a?
ericyoung
21
czy możliwe jest uruchomienie domyślnego działania, zamiast być tak konkretnym, jakie działanie zamierzam rozpocząć?
programista Androida
1
Miałem problemy ze znalezieniem aplikacji i aktywności. Użyłem tej linii rur adb logcat | grep --line-buffered ActivityManager | grep --line-buffereddo wyświetlenia wszystkich wyświetlanych aplikacji.
Att Righ
299

Możliwe jest uruchomienie aplikacji określającej nazwę pakietu tylko za pomocą narzędzia małpującego , postępując według następującego wzoru:

adb shell monkey -p your.app.package.name -c android.intent.category.LAUNCHER 1

Polecenie służy do uruchamiania aplikacji za pomocą małpiego narzędzia, które generuje losowe dane wejściowe dla aplikacji. Ostatnią częścią polecenia jest liczba całkowita, która określa liczbę generowanych losowych danych wejściowych dla aplikacji. W tym przypadku liczba to 1, która w rzeczywistości służy do uruchomienia aplikacji (kliknięcie ikony).

Michał
źródło
91
Launcher jest domyślny. Możesz uprościćadb shell monkey -p your.app.package.name 1
Androiderson
3
Czy można użyć nazwy pliku APK zamiast nazwy pakietu? Załóżmy, że mam plik APK i chcę go zainstalować i uruchomić, czy to możliwe?
programista Androida
1
Co się stanie, jeśli wystąpi błąd: nie znaleziono żadnych działań do uruchomienia. przerywasz ?
IgorGanapolsky
3
@IgorGanapolsky, jeśli nie znaleziono żadnych działań, jest to aplikacja Service i nie ma żadnej aktywności.
m3nda
1
@IgorGanapolsky, jeśli jest to usługa, adb shell am startservice com.some.package.name/.YourServiceSubClassNamepatrz tutaj: stackoverflow.com/a/18703083/211292
ThomasW
122

Lub możesz użyć tego:

adb shell am start -n com.package.name/.ActivityName
Joilnen
źródło
75
czy można to zrobić bez podawania nazwy działania, aby domyślna główna aktywność się rozpoczęła?
programista Androida
5
@androiddeveloper Zobacz poniższe polecenie małpy z depodefi : nie musisz określać nazwy działania!
1111161171159459134
8
Co jeśli nie znam ActivityName ?
IgorGanapolsky
2
Uruchom ~ / android-sdk-linux / build-tools / 20.0.0 / aapt dump badging yourapp.apk, który wyświetli następujący wpis: launchable-activity: name = 'com.company.android.package.YourLaunchableActivity'
JohnyTex
17
monkey -p com.package.name 1viaadb shell
Denys Vitali,
60

Użytkownicy Linuksa / Mac mogą również utworzyć skrypt do uruchamiania apk z następującymi elementami:

utwórz plik o nazwie „adb-run.sh” z tymi 3 liniami:

pkg=$(aapt dump badging $1|awk -F" " '/package/ {print $2}'|awk -F"'" '/name=/ {print $2}')
act=$(aapt dump badging $1|awk -F" " '/launchable-activity/ {print $2}'|awk -F"'" '/name=/ {print $2}')
adb shell am start -n $pkg/$act

następnie „chmod + x adb-run.sh”, aby uczynić go wykonywalnym.

teraz możesz po prostu:

adb-run.sh myapp.apk

Zaletą jest to, że nie musisz znać nazwy pakietu ani nazwy czynności uruchamialnej. Podobnie możesz utworzyć „adb-uninstall.sh myapp.apk”

Uwaga: Wymaga to posiadania aapt na swojej drodze. Można go znaleźć w nowym folderze narzędzi do kompilacji w zestawie SDK.

dljava
źródło
dla
Windowsa
3
Twój post kazał mi spojrzeć na AWK. Poszedłem i odtworzyłem twój skrypt. pastebin.com/X7X1SsFa
Kyle
2
To jest wspaniałe. Dlaczego nie jest to standardowe polecenie adb, którego nigdy nie poznamy.
John Tyree
Nie będziesz musiał mieć aapt na swojej ścieżce (o ile „android” to), jeśli ustawisz ŚCIEŻKĘ w skrypcie adb-run.sh, tak jak poniżej: ŚCIEŻKA = $ (dirname $ (który android)) /. ./build-tools/20.0.0:$PATH
Steve Lemke
@dljava dlaczego to nie działa na play.google.com/store/apps/details?id=com.amaze.filemanager ?
WSS
21

Chcę też wspomnieć o jeszcze jednej rzeczy.

Po uruchomieniu aplikacji z adb shell am, to automatycznie dodaje FLAG_ACTIVITY_NEW_TASK flagę , która sprawia, że zmiany zachowań. Zobacz kod .

Na przykład, jeśli uruchomisz aktywność w Sklepie Play adb shell am, naciśnięcie przycisku „ Wstecz ” (sprzętowy przycisk Wstecz) nie spowoduje przeniesienia Twojej aplikacji, zamiast tego zajęłoby Ci poprzednią aktywność w Sklepie Play, jeśli taka była (Jeśli nie było zadania Sklep Play , to zajmie Ci aplikację). Dokumentacja FLAG_ACTIVITY_NEW_TASK mówi:

jeśli zadanie jest już uruchomione dla działania, które właśnie zaczynasz, nowe działanie nie zostanie uruchomione; zamiast tego bieżące zadanie zostanie po prostu przeniesione na przód ekranu w stanie, w jakim było ostatnio

To spowodowało, że spędziłem kilka godzin, aby dowiedzieć się, co poszło nie tak.

Pamiętaj więc, że adb shell am dodaj flagę FLAG_ACTIVITY_NEW_TASK .

김준호
źródło
1
Warto również wspomnieć, że nie ma sposobu, aby wyczyścić wspomnianą flagę, co jest denerwujące
Kedar Paranjape
16

Równie dobrze możemy uruchomić aplikację, znając jej typ i zasilając ją danymi:

adb shell am start -d "file:///sdcard/sample.3gp" -t "video/3gp" -a android.intent.action.VIEW

To polecenie wyświetla dostępne odtwarzacze wideo do odtwarzania pliku sample.3gp

Anvesh Yalamarthy
źródło
15

Krok 1: Najpierw uzyskaj wszystkie nazwy pakietów aplikacji zainstalowanych na Twoim urządzeniu, używając:

adb shell pm list packages

Krok 2: Otrzymasz wszystkie nazwy pakietów, skopiuj ten, który chcesz zacząć używać adb.

Krok 3: Dodaj żądaną nazwę pakietu w poniższym poleceniu.

adb shell monkey -p 'your package name' -v 500

Na przykład:
adb shell monkey -p com.estrongs.android.pop -v 500 aby uruchomić Eksploratora Es.

Tushar Pandey
źródło
11
Spowoduje to uruchomienie aplikacji i wysłanie do niej 500 pseudolosowych zdarzeń. Więc użyj „1”, aby zastąpić „500”, lepiej.
Lyn
14

otwórz ~ / .bash_profile i dodaj te funkcje bash na końcu pliku

function androidinstall(){
   adb install -r ./bin/$1.apk
}
function androidrun(){
   ant clean debug
   adb shell am start -n $1/$1.$2
}

następnie otwórz folder projektu Androida

androidinstall app-debug && androidrun com.example.app MainActivity
AbdullahDiaa
źródło
2
Czy możesz wyjaśnić, co app-debugrobi?
JayQuerie.com,
3
@TrevorSenior aplikacja-debugowanie to tytuł pliku apk, zwykle w trybie debugowania wygenerowany plik apk nosi tytuł „NAZWA APLIKACJI-debug.apk”
AbdullahDiaa
7

monkey --pct-syskeys 0 dla płyt rozwojowych

Bez tego argumentu aplikacja nie otworzy się na płycie programistycznej bez klawiszy / wyświetlacza:

adb shell monkey --pct-syskeys 0 -p com.cirosantilli.android_cheat.textviewbold 1

i kończy się błędem:

SYS_KEYS has no physical keys but with factor 2.0%

Testowane na HiKey960, Android O AOSP.

Dowiedz się od: https://github.com/ARM-software/lisa/pull/408

Pytanie również: test małpy: jeśli system Android nie ma fizycznych kluczy, jakie parametry należy uwzględnić w poleceniu

Ciro Santilli
źródło
2
adb shell am start -n '<appPackageName>/.<appActitivityName>

Dawny:

adb shell am start -n 'com.android.settings/.wifi.WifiStatusTest'

Możesz użyć aplikacji APK-INFO, aby poznać listę działań aplikacji w odniesieniu do każdego pakietu aplikacji

ImSaleem
źródło
0

Wypróbuj to, aby otworzyć aplikację do zdjęć na Androida i z określonym plikiem obrazu, który ma zostać otwarty jako parametr.

adb shell am start -n com.google.android.apps.photos/.home.HomeActivity -d file:///mnt/user/0/primary/Pictures/Screenshots/Screenshot.png

Będzie działał na najnowszym Androidzie, nie pojawi się wyskakujące okienko, aby wybrać aplikację do otwarcia, gdy podajesz konkretną aplikację, w której chcesz otworzyć obraz

Varun Sharma
źródło
Mam aplikację odtwarzacza, która może przesyłać strumieniowo wideo z adresu URL, jak mogę przekazać ten adres URL jako parametr i przesyłać strumieniowo z tego adresu? przypuśćmy, że URL z youtube?
Wisznu