como executar a ação de um aplicativo específico via terminal?

13

Preciso executar meu aplicativo Android a partir de um computador remoto via SSH, mas não sou especialista em linha de comando, então gostaria de saber: como executar uma ação específica de um aplicativo? (e não apenas abri-lo) O que implica: como CONHECER a sintaxe exata das possíveis ações de um aplicativo?

Por exemplo: quero iniciar um aplicativo de gravação de áudio no meu telefone no meu computador e começar a gravar remotamente. É possível?

Obrigado Andrea

Andrea
fonte

Respostas:

12

Usa isto:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

Para controlar um aplicativo, você precisará colocar os valores corretos de <package_name>e <full_class_name>no comando. Por exemplo, você pode usar com.google.gmail/com.google.gmail.check_mail(Nomes hipotéticos) como última parte do comando.

É fácil obter o nome do pacote de um aplicativo , mas a obtenção do nome da classe de ação não é. Existem dois problemas:

  1. Muitos desenvolvedores de aplicativos mantêm as informações da classe privadas.

  2. Nem todos os desenvolvedores fazem programação modular inteligente. É um bom hábito dividir um aplicativo em várias classes, o que pode ser acionado por intenções, mas nem todos os desenvolvedores são inteligentes.

Solução do 1º problema: descompile o aplicativo usando o apktool e veja todas as informações. Também existem outras maneiras, mas essa é sempre o método que funciona (a menos que o aplicativo seja baseado no NDK em vez do SDK).

Solução do 2º problema: Nada.

Não se preocupe, a maioria dos aplicativos populares segue as melhores práticas de programação e fornece Public APIcom as quais você pode obter informações sobre a classe.

Android Quesito
fonte
Você poderia adicionar alguma explicação sobre os parâmetros <package_name>e <full_class_name>, e como obtê-los? Para mim, pelo menos o último não está claro.
Izzy
@Izzy Adicionou a explicação ... Revise a resposta novamente.
Android Quesito
Obrigado! +1 de mim: D Compacto e fácil de entender. Tomei a liberdade de adicionar alguns links, se você não se importa, pois apktools(quem não é o desenvolvedor pode pensar que faz parte do SDK e se perder;)
Izzy
@Izzy Aqui está o meu problema: eu sou incapaz de lançar esta Atividade do aplicativo Configurações: com.android.settings/.Settings$StorageSettingsActivity. Tente você mesmo. Na verdade, o que é essa sequência após o $sinal? É como uma subclasse na atividade Configurações?
Gokul NC
@GokulNC, pode ser necessário citar a coisa toda (aspas simples) ou $StorageSettingsActivityser visto como uma variável e "expandido" para uma string vazia (a menos que exista uma variável definida por esse nome).
Izzy
9

Como Sachin Shekhar disse, você deve usar o seguinte comando:

am start -a android.intent.action.MAIN -n <package_name>/<full_class_name>

Veja um exemplo concreto:

  • obtendo o arquivo apk do seu dispositivo Android ou qualquer mercado
  • executando este comando:

aapt dump xmltree com.android.settings*.apk AndroidManifest.xml

Gostaria de iniciar o menu "amarrar", então procuro uma atividade na saída:

(...)
   E: activity (line=190)
    A: android:name(0x01010003)=".TetherSettings" (Raw: ".TetherSettings")
(...)

Portanto, o comando final é:

am start -a android.intent.action.MAIN -n com.android.settings/.TetherSettings

O aaptcomando faz parte do Android SDK

Gilles Quenot
fonte
1
: D Teste, ele funciona como um encanto. Este é um exemplo de trabalho da vida real © ® ™.
Gilles Quenot
2
Sorte e ciência da computação são completamente opostas. É um caminho relativo .
Gilles Quenot
2
Não, você pode omitir o com.android.settingsPATH, foi por isso que eu disse que é relativo. Teste-o em qualquer aplicativo que desejar.
Gilles Quenot
2
Eu não disse que não funcionaria com outros aplicativos. O ponto antes do nome da classe faz a mágica. Mas, isso não deve ser encorajado.
Android Quesito
1
Você disse que isso é sorte, isso não é. Você tem fontes para sua afirmação? Por que isso não deve ser incentivado?
Gilles Quenot