Como iniciar um aplicativo usando as ferramentas ADB do Android?

Respostas:

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

Ou você pode usar isso diretamente:

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

Você também pode especificar ações a serem filtradas pelos seus filtros de intenção:

am start -a com.example.ACTION_NAME -n com.package.name/com.package.name.ActivityName 
Cristian
fonte
23
Muito obrigado, eu fiz isso Função Shell em ~ / .bash_profile ser muito mais rápido function androidrun(){ ant clean debug adb shell am start -n $1/$1.MainActivity }e seu usoandroidrun com.example.test
AbdullahDiaa
3
adb shell amfornecerá uma lista de outras opções para passar para o amcomando. Você pode descobrir mais em developer.android.com/tools/help/adb.html#am
Ehtesh Choudhury
1
@shurane Como posso encontrar uma opção -a?
Ericyoung 28/05
21
é possível executar a atividade padrão, em vez de ser tão específico para qual atividade eu pretendo que ela deva iniciar?
desenvolvedor android
1
Tive problemas para encontrar o aplicativo e a atividade. Eu usei essa linha de tubulação adb logcat | grep --line-buffered ActivityManager | grep --line-bufferedpara listar todos os aplicativos que foram exibidos.
precisa
299

É possível executar o aplicativo especificando o nome do pacote apenas usando a ferramenta monkey , seguindo este padrão:

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

O comando é usado para executar o aplicativo usando a ferramenta monkey, que gera entrada aleatória para o aplicativo. A última parte do comando é um número inteiro que especifica o número de entradas aleatórias geradas para o aplicativo. Nesse caso, o número é 1, que de fato é usado para iniciar o aplicativo (clique no ícone).

Michal
fonte
92
Iniciador é o padrão. Você pode simplificar paraadb shell monkey -p your.app.package.name 1
Androiderson
3
É possível usar o nome do arquivo APK em vez do nome do pacote? Suponha que eu possua um arquivo APK e que queira instalá-lo e executá-lo, é possível?
desenvolvedor android
1
E se eu receber um erro: nenhuma atividade encontrada para execução. abortando ?
IgorGanapolsky
3
@IgorGanapolsky, se nenhuma atividade for encontrada, é um aplicativo de Serviço e não tem Atividade.
M3nda # 6/16
1
@IgorGanapolsky se é um uso de serviço adb shell am startservice com.some.package.name/.YourServiceSubClassNamever aqui: stackoverflow.com/a/18703083/211292
Thomasw
123

Ou você pode usar isso:

adb shell am start -n com.package.name/.ActivityName
Joilnen
fonte
76
é possível fazer isso sem especificar o nome da atividade, para que a atividade principal padrão seja iniciada?
desenvolvedor android
5
@androiddeveloper Veja o comando monkey abaixo em depodefi : não há necessidade de especificar o nome da atividade!
1111161171159459134
8
E se eu não souber o ActivityName ?
IgorGanapolsky 01/09/16
2
Execute ~ / android-sdk-linux / build-tools / 20.0.0 / aapt dump badging yourapp.apk, que listará a seguinte entrada: launchchable-activity: name = 'com.company.android.package.YourLaunchableActivity'
JohnyTex
17
monkey -p com.package.name 1viaadb shell
Denys Vitali
60

Os usuários linux / mac também podem criar um script para executar um apk com algo como o seguinte:

crie um arquivo chamado "adb-run.sh" com estas 3 linhas:

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

depois "chmod + x adb-run.sh" para torná-lo executável.

agora você pode simplesmente:

adb-run.sh myapp.apk

O benefício aqui é que você não precisa saber o nome do pacote ou o nome da atividade iniciável. Da mesma forma, você pode criar "adb-uninstall.sh myapp.apk"

Nota: Isso requer que você tenha o apap no seu caminho. Você pode encontrá-lo na nova pasta de ferramentas de compilação no SDK.

dljava
fonte
para Windows, você pode tentar com o Cygwin (não testado)
dljava
3
Sua postagem me fez procurar AWK. Fui em frente e recriei seu script. pastebin.com/X7X1SsFa
Kyle
2
Isso é fabuloso. Por que este não é um comando adb padrão que nunca saberemos.
precisa
Você não precisará do aapt no caminho (contanto que "android" seja) se definir o PATH no script adb-run.sh, assim: PATH = $ (dirname $ (qual android)) /. ./build-tools/20.0.0:$PATH
Steve Lemke
@dljava Por que isso não funciona no play.google.com/store/apps/details?id=com.amaze.filemanager ?
WSS
21

Além disso, quero mencionar mais uma coisa.

Quando você inicia um aplicativo adb shell am, ele adiciona automaticamente o sinalizador FLAG_ACTIVITY_NEW_TASK, o que altera o comportamento. Veja o código .

Por exemplo, se você iniciar a atividade da Play Store adb shell am, pressionar o botão ' Voltar ' (botão voltar do hardware) não levará o seu aplicativo; em vez disso, levará a atividade anterior da Play Store se houver alguma (se não houver tarefa da Play Store , você levaria o seu aplicativo). A documentação do FLAG_ACTIVITY_NEW_TASK diz:

se uma tarefa já estiver em execução para a atividade que você está iniciando agora, uma nova atividade não será iniciada; em vez disso, a tarefa atual será simplesmente trazida para a frente da tela com o estado em que foi a última

Isso me levou a gastar algumas horas para descobrir o que deu errado.

Portanto, lembre-se de adb shell am adicionar o sinalizador FLAG_ACTIVITY_NEW_TASK .

김준호
fonte
1
Além disso, vale a pena mencionar que que não há nenhuma maneira de limpar disse bandeira, que é irritante
Kedar Paranjape
16

Também podemos iniciar um aplicativo conhecendo o tipo de aplicativo e alimentando-o com dados:

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

Este comando exibe os players de vídeo disponíveis para reproduzir o arquivo sample.3gp

Anvesh Yalamarthy
fonte
15

Etapa 1: obtenha primeiro o nome do pacote dos aplicativos instalados no seu dispositivo, usando:

adb shell pm list packages

Etapa 2: você receberá todos os nomes dos pacotes e copie o nome que deseja começar a usar adb.

Etapa 3: adicione o nome do pacote desejado no comando abaixo.

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

Por exemplo:
adb shell monkey -p com.estrongs.android.pop -v 500 para iniciar o Es explorer.

Tushar Pandey
fonte
11
Isso iniciará seu aplicativo e enviará 500 eventos pseudo-aleatórios para ele. Portanto, use '1' para substituir '500' é melhor.
Lyn
14

abra ~ / .bash_profile e adicione essas funções bash ao final do arquivo

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

abra a pasta do projeto Android

androidinstall app-debug && androidrun com.example.app MainActivity
AbdullahDiaa
fonte
2
Você pode explicar o que app-debugfaz?
JayQuerie.com
3
@TrevorSenior app-debug é o título do arquivo apk, geralmente em modo de depuração o arquivo apk gerado é intitulado "APLICAÇÃO NOME-debug.apk"
AbdullahDiaa
7

monkey --pct-syskeys 0 para placas de desenvolvimento

Sem esse argumento, o aplicativo não será aberto em uma placa de desenvolvimento sem teclas / display:

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

e falha com erro:

SYS_KEYS has no physical keys but with factor 2.0%

Testado em HiKey960, Android O AOSP.

Aprendido em: https://github.com/ARM-software/lisa/pull/408

Também perguntado em: teste de macaco: se o sistema Android não possui chaves físicas, quais são os parâmetros que devem ser incluídos no comando

Ciro Santilli adicionou uma nova foto
fonte
2
adb shell am start -n '<appPackageName>/.<appActitivityName>

Ex:

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

Você pode usar o aplicativo APK-INFO para conhecer a lista de atividades do aplicativo em relação a cada pacote de aplicativos

ImSaleem
fonte
0

Tente isso, para abrir um aplicativo de foto do Android e com um arquivo de imagem 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

Ele funcionará no Android mais recente; nenhum pop-up virá para selecionar um aplicativo para abrir, pois você está dando um aplicativo específico para o qual deseja abrir sua imagem.

Varun Sharma
fonte
Eu tenho um aplicativo player, capaz de transmitir um vídeo a partir de URL, como posso transmitir esse URL como parâmetro e transmitir a partir desse URL? suponha um URL do youtube?
Vishnu