¿Cómo iniciar una aplicación usando herramientas Android ADB?

Respuestas:

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

O puede usar esto directamente:

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

También puede especificar acciones para que sean filtradas por sus filtros de intención:

am start -a com.example.ACTION_NAME -n com.package.name/com.package.name.ActivityName 
Cristian
fuente
23
Muchas gracias, he hecho que la función de shell en ~ / .bash_profile sea mucho más rápida function androidrun(){ ant clean debug adb shell am start -n $1/$1.MainActivity }y su usoandroidrun com.example.test
AbdullahDiaa
3
adb shell amle dará una lista de otras opciones para pasar al amcomando. Puede encontrar más información en developer.android.com/tools/help/adb.html#am
Ehtesh Choudhury
1
@shurane ¿Cómo puedo encontrar una opción?
ericyoung
21
¿Es posible ejecutar la actividad predeterminada, en lugar de ser tan específico de la actividad que pretendo que comience?
desarrollador de Android
1
Tuve problemas para encontrar la aplicación y la actividad. Usé esta línea de tubería adb logcat | grep --line-buffered ActivityManager | grep --line-bufferedpara enumerar todas las aplicaciones que se mostraron.
Att Righ
299

Es posible ejecutar la aplicación que especifica el nombre del paquete solo con la herramienta monkey siguiendo este patrón:

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

El comando se usa para ejecutar la aplicación usando la herramienta monkey que genera una entrada aleatoria para la aplicación. La última parte del comando es un entero que especifica el número de entradas aleatorias generadas para la aplicación. En este caso, el número es 1, que de hecho se utiliza para iniciar la aplicación (clic en el icono).

Michal
fuente
92
El iniciador es el predeterminado. Puede simplificar aadb shell monkey -p your.app.package.name 1
Androiderson
3
¿Es posible usar el nombre del archivo APK, en lugar del nombre del paquete? Supongamos que tengo un archivo APK y quiero poder instalarlo y ejecutarlo, ¿es posible?
Desarrollador de Android
1
¿Qué sucede si recibo un error: no se encontraron actividades para ejecutar? abortando ?
IgorGanapolsky
3
@IgorGanapolsky si no se encuentran actividades, es una aplicación de servicio y no tiene ninguna actividad.
m3nda
1
@IgorGanapolsky si es un uso de servicio, adb shell am startservice com.some.package.name/.YourServiceSubClassNamevea aquí: stackoverflow.com/a/18703083/211292
ThomasW
123

O podrías usar esto:

adb shell am start -n com.package.name/.ActivityName
Joilnen
fuente
76
¿Es posible hacerlo sin especificar el nombre de la actividad, para que se inicie la actividad principal predeterminada?
Desarrollador de Android
55
@androiddeveloper Vea el comando de mono a continuación de depodefi : ¡no es necesario especificar el nombre de la actividad!
1111161171159459134
8
¿Qué pasa si no sé el ActivityName ?
IgorGanapolsky
2
Ejecute ~ / android-sdk-linux / build-tools / 20.0.0 / aapt dump badging yourapp.apk, que enumerará la siguiente entrada: launchable-activity: name = 'com.company.android.package.YourLaunchableActivity'
JohnyTex
17
monkey -p com.package.name 1víaadb shell
Denys Vitali
60

Los usuarios de Linux / Mac también pueden crear un script para ejecutar un apk con algo como lo siguiente:

cree un archivo llamado "adb-run.sh" con estas 3 líneas:

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

luego "chmod + x adb-run.sh" para hacerlo ejecutable.

ahora puedes simplemente:

adb-run.sh myapp.apk

El beneficio aquí es que no necesita saber el nombre del paquete o el nombre de la actividad iniciable. Del mismo modo, puede crear "adb-uninstall.sh myapp.apk"

Nota: Esto requiere que tenga un camino en su camino. Puede encontrarlo en la nueva carpeta de herramientas de compilación en el SDK.

dljava
fuente
para windows puedes probar con cygwin (no probado)
dljava
3
Tu publicación me hizo buscar AWK. Seguí adelante y recreé tu guión. pastebin.com/X7X1SsFa
Kyle
2
Esto es fabuloso. Por qué este no es un comando adb estándar que nunca sabremos.
John Tyree
No necesitará tener un aapt en su camino (siempre y cuando "android" lo esté) si configura la RUTA en el script adb-run.sh, así: RUTA = $ (dirname $ (que android)) /. ./build-tools/20.0.0:$PATH
Steve Lemke
@dljava ¿por qué esto no funciona en play.google.com/store/apps/details?id=com.amaze.filemanager ?
WSS
21

Además, quiero mencionar una cosa más.

Cuando inicia una aplicación desde adb shell am, agrega automáticamente el indicador FLAG_ACTIVITY_NEW_TASK que hace que el comportamiento cambie. Mira el código .

Por ejemplo, si inicia la actividad de Play Store adb shell am, presionar el botón ' Atrás ' (botón de retroceso del hardware) no le llevaría a su aplicación, sino que le llevaría a la actividad anterior de Play Store si hubiera alguna (si no hubiera una tarea de Play store) , entonces te llevaría tu aplicación). La documentación de FLAG_ACTIVITY_NEW_TASK dice:

si ya se está ejecutando una tarea para la actividad que está comenzando, entonces no se iniciará una nueva actividad; en cambio, la tarea actual simplemente será llevada al frente de la pantalla con el estado en el que estuvo por última vez

Esto me llevó a pasar unas horas para descubrir qué salió mal.

Por lo tanto, tenga en cuenta que adb shell am agregue la bandera FLAG_ACTIVITY_NEW_TASK .

김준호
fuente
1
Además, vale la pena mencionar que no hay forma de despejar dicha bandera, lo cual es molesto
Kedar Paranjape
16

También podemos iniciar una aplicación conociendo el tipo de aplicación y alimentándola con datos:

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

Este comando muestra los reproductores de video disponibles para reproducir el archivo sample.3gp

Anvesh Yalamarthy
fuente
15

Paso 1: Primero obtenga todo el nombre del paquete de las aplicaciones instaladas en su Dispositivo, usando:

adb shell pm list packages

Paso 2: Obtendrá todos los nombres de paquete, copie el que desea comenzar a usar adb.

Paso 3: Agregue el nombre del paquete deseado en el siguiente comando.

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

Por ejemplo:
adb shell monkey -p com.estrongs.android.pop -v 500 para iniciar el explorador Es.

Tushar Pandey
fuente
11
Esto iniciará su aplicación y le enviará 500 eventos pseudoaleatorios. Así que use '1' para reemplazar '500' es mejor.
Lyn
14

abra ~ / .bash_profile y agregue estas funciones bash al final del archivo

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

luego abra la carpeta del proyecto de Android

androidinstall app-debug && androidrun com.example.app MainActivity
AbdullahDiaa
fuente
2
¿Puedes explicar qué app-debughace?
JayQuerie.com
3
@TrevorSenior app-debug es el título del archivo apk, generalmente en modo de depuración el archivo apk generado se titula "APLICACIÓN NOMBRE-debug.apk"
AbdullahDiaa
7

monkey --pct-syskeys 0 para tableros de desarrollo

Sin este argumento, la aplicación no se abrirá en una placa de desarrollo sin teclas / pantalla:

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

y falla con error:

SYS_KEYS has no physical keys but with factor 2.0%

Probado en HiKey960, Android O AOSP.

Aprendí de: https://github.com/ARM-software/lisa/pull/408

También preguntado en: prueba de mono: si el sistema Android no tiene claves físicas, ¿cuáles son los parámetros que deben incluirse en el comando?

Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
fuente
2
adb shell am start -n '<appPackageName>/.<appActitivityName>

Ex:

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

Puede usar la aplicación APK-INFO para conocer la lista de actividades de la aplicación con respecto a cada paquete de aplicaciones

ImSaleem
fuente
0

Pruebe esto, para abrir una aplicación de fotos de Android y con un archivo de imagen específico para abrir como parámetro.

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

Funcionará en el último Android, no aparecerá ninguna ventana emergente para seleccionar una aplicación para abrir, ya que está dando una aplicación específica a la que desea abrir su imagen con

Varun Sharma
fuente
Tengo una aplicación de reproductor, que puede transmitir un video desde la url, ¿cómo puedo pasar esta url como parámetro y transmitir desde esa url? supongamos una url de youtube?
Vishnu