Come avviare un'applicazione utilizzando gli strumenti Android ADB?


Risposte:


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

Oppure puoi usarlo direttamente:

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

Puoi anche specificare le azioni da filtrare in base ai tuoi filtri di intento:

am start -a com.example.ACTION_NAME -n com.package.name/com.package.name.ActivityName 

23
Grazie mille, l'ho reso funzione shell in ~ / .bash_profile per essere molto più veloce function androidrun(){ ant clean debug adb shell am start -n $1/$1.MainActivity }e il suo utilizzoandroidrun com.example.test
AbdullahDiaa,

3
adb shell amti darà un elenco di altre opzioni da passare al amcomando. Puoi saperne di più su developer.android.com/tools/help/adb.html#am
Ehtesh Choudhury

1
@shurane Come posso trovare un'opzione?
ericyoung,

21
è possibile eseguire l'attività predefinita, invece di essere così specifico per quale attività intendo che debba iniziare?
sviluppatore Android il

1
Ho avuto problemi a trovare l'applicazione e l'attività. Ho usato questa linea di tubi adb logcat | grep --line-buffered ActivityManager | grep --line-bufferedper elencare tutte le applicazioni visualizzate.
Att Righ

299

È possibile eseguire l'applicazione specificando il nome del pacchetto utilizzando solo lo strumento scimmia seguendo questo modello:

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

Il comando viene utilizzato per eseguire l'app utilizzando lo strumento scimmia che genera input casuali per l'applicazione. L'ultima parte del comando è un numero intero che specifica il numero di input casuali generati per l'app. In questo caso il numero è 1, che in realtà viene utilizzato per avviare l'app (icona clic).


92
Launcher è predefinito. Puoi semplificare aadb shell monkey -p your.app.package.name 1
Androiderson il

3
È possibile utilizzare il nome del file APK anziché il nome del pacchetto? Supponiamo di avere un file APK e di poterlo installare ed eseguirlo, è possibile?
sviluppatore Android

1
Cosa succede se visualizzo un errore: nessuna attività trovata per l'esecuzione. abortire ?
IgorGanapolsky il

3
@IgorGanapolsky se non viene trovata alcuna attività, è un'app di servizio e non ha attività.
m3nda,

1
@IgorGanapolsky se si tratta di un uso di servizio adb shell am startservice com.some.package.name/.YourServiceSubClassNamevedi qui: stackoverflow.com/a/18703083/211292
ThomasW

123

Oppure potresti usare questo:

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

76
è possibile farlo senza specificare il nome dell'attività, in modo che inizi l'attività principale predefinita?
sviluppatore Android

5
@androiddeveloper Guarda il comando scimmia sotto da depodefi : non c'è bisogno di specificare il nome dell'attività!
1111161171159459134,

8
Cosa succede se non conosco ActivityName ?
IgorGanapolsky,

2
Esegui ~ / android-sdk-linux / build-tools / 20.0.0 / aapt dump badging yourapp.apk, che elencherà la seguente voce: launchable-activity: name = 'com.company.android.package.YourLaunchableActivity'
JohnyTex

17
monkey -p com.package.name 1viaadb shell
Denys Vitali

60

Gli utenti linux / mac possono anche creare uno script per eseguire un apk con qualcosa di simile al seguente:

crea un file chiamato "adb-run.sh" con queste 3 righe:

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

quindi "chmod + x adb-run.sh" per renderlo eseguibile.

ora puoi semplicemente:

adb-run.sh myapp.apk

Il vantaggio qui è che non è necessario conoscere il nome del pacchetto o il nome dell'attività avviabile. Allo stesso modo, puoi creare "adb-uninstall.sh myapp.apk"

Nota: questo richiede che tu abbia aapt nel tuo percorso. Puoi trovarlo nella nuova cartella degli strumenti di build nell'SDK.


per windows puoi provare con cygwin (non testato)
dljava il

3
Il tuo post mi ha fatto cercare AWK. Sono andato avanti e ho ricreato la tua sceneggiatura. pastebin.com/X7X1SsFa
Kyle

2
Questo è favoloso Perché questo non è un comando adb standard non lo sapremo mai.
John Tyree,

Non avrai bisogno di avere aapt nel tuo percorso (purché sia ​​"android") se imposti il ​​PERCORSO nello script adb-run.sh, in questo modo: PATH = $ (dirname $ (quale android)) /. ./build-tools/20.0.0:$PATH
Steve Lemke,

@dljava perché questo non funziona su play.google.com/store/apps/details?id=com.amaze.filemanager ?
WSS,

21

Inoltre, voglio menzionare un'altra cosa.

Quando si avvia un'applicazione da adb shell am, aggiunge automaticamente il flag FLAG_ACTIVITY_NEW_TASK che modifica il comportamento. Vedere il codice .

Ad esempio, se avvii l'attività del Play Store da adb shell am, premendo il pulsante ' Indietro ' (pulsante hardware indietro) non ti porterebbe la tua app, invece ti porterebbe l'attività del Play Store precedente se ce n'era (Se non c'era attività Play Store , quindi ti prenderebbe la tua app). La documentazione di FLAG_ACTIVITY_NEW_TASK dice:

se un'attività è già in esecuzione per l'attività che si sta avviando, non verrà avviata una nuova attività; invece, l'attività corrente verrà semplicemente portata in primo piano sullo schermo con lo stato in cui era stata l'ultima volta

Questo mi ha fatto passare alcune ore a scoprire cosa è andato storto.

Quindi, tieni presente che adb shell am aggiungi il flag FLAG_ACTIVITY_NEW_TASK .


1
Inoltre, vale la pena ricordare che non c'è modo di cancellare la bandiera, il che è fastidioso
Kedar Paranjape,

16

Possiamo anche avviare un'applicazione conoscendo il tipo di applicazione e fornendo dati:

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

Questo comando visualizza i lettori video disponibili per riprodurre il file sample.3gp


15

Passaggio 1: ottenere innanzitutto tutto il nome del pacchetto delle app installate sul dispositivo, utilizzando:

adb shell pm list packages

Passaggio 2: otterrete tutti i nomi dei pacchetti, copiando quello che si desidera iniziare a utilizzare adb.

Passaggio 3: aggiungere il nome del pacchetto desiderato nel comando seguente.

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

Ad esempio:
adb shell monkey -p com.estrongs.android.pop -v 500 per avviare Es explorer.


11
Questo avvierà la tua applicazione e ti invierà 500 eventi pseudo-casuali. Quindi usare '1' per sostituire '500' è meglio.
Lyn,

14

apri ~ / .bash_profile e aggiungi queste funzioni bash alla fine del file

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

quindi apri la cartella del progetto Android

androidinstall app-debug && androidrun com.example.app MainActivity

2
Puoi spiegare cosa app-debugfa?
JayQuerie.com

3
@TrevorSenior app-debug è il titolo del file apk, di solito in modalità debug il file apk generato è intitolato "NOME APPLICAZIONE-debug.apk"
AbdullahDiaa

7

monkey --pct-syskeys 0 per schede di sviluppo

Senza questo argomento, l'app non si aprirà su una scheda di sviluppo senza chiavi / display:

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

e non riesce con errore:

SYS_KEYS has no physical keys but with factor 2.0%

Testato su HiKey960, Android O AOSP.

Imparato da: https://github.com/ARM-software/lisa/pull/408

Anche chiesto a: test delle scimmie: se il sistema Android non ha chiavi fisiche, quali sono i parametri che devono essere inclusi nel comando


2
adb shell am start -n '<appPackageName>/.<appActitivityName>

Ex:

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

È possibile utilizzare l'applicazione APK-INFO per conoscere l'elenco delle attività dell'app in relazione a ciascun pacchetto dell'app


0

Prova questo, per aprire un'app per foto Android e con un file di immagine specifico da aprire come parametro.

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

Funzionerà con l'ultimo Android, non verrà visualizzato alcun pop-up per selezionare un'applicazione da aprire mentre stai dando un'app specifica con cui vuoi aprire l'immagine con


Ho un'app player, che è in grado di trasmettere in streaming un video dall'URL, come posso passare questo URL come parametro e trasmettere da quell'URL? supponiamo un URL da YouTube?
Vishnu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.