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?
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:
Muitos desenvolvedores de aplicativos mantêm as informações da classe privadas.
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.
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
<package_name>
e<full_class_name>
, e como obtê-los? Para mim, pelo menos o último não está claro.apktools
(quem não é o desenvolvedor pode pensar que faz parte do SDK e se perder;)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?$StorageSettingsActivity
ser visto como uma variável e "expandido" para uma string vazia (a menos que exista uma variável definida por esse nome).Como Sachin Shekhar disse, você deve usar o seguinte comando:
Veja um exemplo concreto:
aapt dump xmltree com.android.settings*.apk AndroidManifest.xml
Gostaria de iniciar o menu "amarrar", então procuro uma atividade na saída:
Portanto, o comando final é:
O
aapt
comando faz parte do Android SDKfonte
com.android.settings
PATH, foi por isso que eu disse que é relativo. Teste-o em qualquer aplicativo que desejar.