¿Cómo ejecutar la acción de una aplicación específica a través del terminal?

13

Necesito ejecutar mi aplicación de Android desde una computadora remota a través de SSH, pero no soy un experto en línea de comandos, así que me gustaría saber: ¿cómo ejecutar una acción específica de una aplicación? (no solo abrirlo) Lo que implica: ¿cómo SABER la sintaxis exacta de las posibles acciones de una aplicación?

por ejemplo: quiero iniciar una aplicación de grabación de audio en mi teléfono desde mi computadora, Y comenzar a grabar desde el control remoto. ¿Es posible?

Gracias Andrea

Andrea
fuente

Respuestas:

12

Utilizar esta:

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

Para controlar una aplicación, tendrá que poner los valores correctos de <package_name>y <full_class_name>en el comando. Por ejemplo, puede usar com.google.gmail/com.google.gmail.check_mail(Nombres hipotéticos) como última parte del comando.

Obtener el nombre del paquete de una aplicación es fácil , pero obtener el nombre de acción de la clase no lo es. Hay dos problemas:

  1. Muchos desarrolladores de aplicaciones mantienen la información de clase privada.

  2. No todos los desarrolladores hacen programación modular inteligente. Es un buen hábito dividir una aplicación en varias clases que podrían activarse por intentos, pero no todos los desarrolladores son inteligentes.

Solución del primer problema: descompile la aplicación usando apktool y vea toda la información. También hay otras formas, pero este es un método que siempre funciona (a menos que la aplicación se base en NDK en lugar de SDK).

Solución del segundo problema: nada.

No se preocupe, la mayoría de las aplicaciones populares siguen las mejores prácticas de programación y proporcionan Public APIinformación de la clase.

Android Quesito
fuente
¿Es posible añadir alguna explicación sobre los parámetros <package_name>y <full_class_name>, y la manera de obtenerlos? Para mí, al menos esto último no está claro.
Izzy
@Izzy Agregó la explicación ... Revise la respuesta, nuevamente.
Android Quesito
¡Gracias! +1 de mi parte: D Compacto y fácil de entender. Tomaré la libertad de agregar algunos enlaces, si no le importa, porque apktools(de lo contrario, los no desarrolladores podrían pensar que es parte del SDK y perderse;)
Izzy
@Izzy Aquí está mi problema: Soy incapaz de poner en marcha esta Actividad de aplicación Ajustes: com.android.settings/.Settings$StorageSettingsActivity. Inténtalo tú mismo. En realidad, ¿qué es esa cadena después del $signo? ¿Es como una subclase en la actividad Configuración?
Gokul NC
@GokulNC, es posible que necesite citar todo (comillas simples), o $StorageSettingsActivitypuede verse como una variable y "expandida" a una cadena vacía (a menos que haya una variable definida por ese nombre).
Izzy
9

Como dijo Sachin Shekhar, debe usar el siguiente comando:

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

Vea un ejemplo concreto:

  • obtener el archivo apk de su dispositivo Android o cualquier lugar de Market
  • ejecutando este comando:

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

Me gustaría comenzar el menú "anclaje", así que busco una actividad en la salida:

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

Entonces el comando final es:

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

El aaptcomando es parte del SDK de Android

Gilles Quenot
fuente
1
: D Pruébalo, funciona como un encanto. Este es un ejemplo de trabajo de la vida real © ® ™.
Gilles Quenot
2
La suerte y la informática son bastante opuestas. Es un camino relativo .
Gilles Quenot
2
No, puedes omitir la com.android.settingsRUTA, por eso dije que es relativa. Pruébelo en cualquier aplicación que desee.
Gilles Quenot
2
No dije que no funcionaría con otras aplicaciones. El punto antes del nombre de la clase hace la magia. Pero, esto no debe ser alentado.
Android Quesito
1
Dijiste que es suerte, esto no lo es. ¿Tienes fuentes para tu afirmación? ¿Por qué esto no debería ser alentado?
Gilles Quenot