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 

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


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

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.


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


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 .


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


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.


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

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


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


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.