El Android SDK tiene una API para enviar comandos al teléfono llamado Monkeyrunner. Parece ser una API de Python. ¿De todos modos puedo usarlo en una aplicación Java?¿Cómo puedo hacer una aplicación Java usando la API de Monkeyrunner?
Respuesta
Bien, he estado tratando de hacer esto, aquí es lo que he encontrado (gracias a Google y algo de ayuda de los miembros en el Internet)
Aquí es un pequeño programa en Java que utiliza monkeyrunner para imprimir el nombre de la dispositivo
import com.android.monkeyrunner.MonkeyDevice;
import com.android.monkeyrunner.adb.AdbBackend;
public class Monk {
public static void main(String[] args) {
// TODO code application logic here
Monk monk=new Monk();
monk.demo();
}
public void demo()
{
AdbBackend ab = new AdbBackend();
MonkeyDevice device = ab.waitForConnection();
//Print Device Name
System.out.println(device.getProperty("build.model"));
device.dispose();
}
}
para el código anterior también funciona, que tenía que incluir los siguientes frascos monkeyrunner, ddmlib, Jython, guavalib, sdklib.
Aquí es una actualización de @ respuesta de Harkish que trabaja con lo que suponen que es la versión actual de MonkeyRunner:
import com.android.chimpchat.adb.AdbBackend;
import com.android.chimpchat.core.IChimpDevice;
public class MonkeyTest {
public static void main(String[] args) {
// sdk/platform-tools has to be in PATH env variable in order to find adb
IChimpDevice device = new AdbBackend().waitForConnection();
// Print Device Name
System.out.println(device.getProperty("build.model"));
// Take a snapshot and save to out.png
device.takeSnapshot().writeToFile("out.png", null);
device.dispose();
}
}
Las dependencias de bibliotecas son:
chimpchat.jar, common.jar, ddmlib.jar, guava-13.0.1.jar, sdklib.jar
Todos ellos pueden ser encontrados en el subdirectorio sdk/tools/lib
del paquete ADT.
Estoy brincando para proporcionar otra respuesta actualizada. Esto es lo que un desarrollador de Google también aconsejó. Creo que es una implementación más sólida y utiliza más métodos a prueba de fallas.
import java.util.Map;
import java.util.TreeMap;
import com.android.chimpchat.ChimpChat;
import com.android.chimpchat.core.IChimpDevice;
public class MonkeyRunnerTest {
private static final String ADB = "/path-to-your-sdk/sdk/platform-tools/adb";
private static final long TIMEOUT = 5000;
/**
* @param args
*/
public static void main(String[] args) {
Map<String, String> options = new TreeMap<String, String>();
options.put("backend", "adb");
//this is so you don't need to add adb or platform-tools to your system path
options.put("adbLocation", ADB);
ChimpChat chimpchat = ChimpChat.getInstance(options);
//Using this method is advised as to avoid hangs,as this would wait indefinitely
//Actually waitForConnection() doesn't wait indefinitely but for Integer.MAX_VALUE milliseconds, which still makes up for 596 hours
IChimpDevice device = chimpchat.waitForConnection(TIMEOUT, ".*");
chimpchat.shutdown();
}
}
Puede ver todas las propiedades dispositivos con:
for (String prop: device.getPropertyList()) {
System.out.println(prop + ": " + device.getProperty(prop));
}
Para obtener información sobre las API que puede buscar en la documentación aquí: monkey runner api classes
Sólo para complementar la gran respuesta de ValarDohaeris, aquí están las dependencias actuales en formato maven:
<properties>
<com.android.tools.version>24.3.1</com.android.tools.version>
</properties>
<dependencies>
<dependency>
<groupId>net.sf.sociaal</groupId>
<artifactId>chimpchat</artifactId>
<version>22.6.3</version>
</dependency>
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>18.0</version>
</dependency>
<dependency>
<groupId>com.android.tools</groupId>
<artifactId>sdklib</artifactId>
<version>${com.android.tools.version}</version>
</dependency>
<dependency>
<groupId>com.android.tools</groupId>
<artifactId>common</artifactId>
<version>${com.android.tools.version}</version>
</dependency>
<dependency>
<groupId>com.android.tools</groupId>
<artifactId>sdk-common</artifactId>
<version>${com.android.tools.version}</version>
</dependency>
<dependency>
<groupId>com.android.tools.ddms</groupId>
<artifactId>ddmlib</artifactId>
<version>${com.android.tools.version}</version>
</dependency>
</dependencies>
? Actualmente, la lib más actualizada parece ser https://mvnrepository.com/artifact/net.sf.jali/jali-adm/1.0.7 – Ajax
- 1. ¿Cómo puedo hacer que una aplicación Java se actualice automáticamente?
- 2. Cómo hacer una carpeta oculta usando java
- 3. ¿Cómo capturo SocketExceptions en MonkeyRunner?
- 4. ¿Cómo puedo pasar un extra a un intento de Android usando MonkeyRunner?
- 5. Cómo hacer varias ventanas usando Win32 API
- 6. ¿Cómo puedo interceptar la ejecución de todos los métodos en una aplicación Java usando Groovy?
- 7. Cómo usar el monkeyrunner? no solo Arrastrar
- 8. ¿Cómo eliminar MenuBar de una aplicación usando Windows API?
- 9. ¿Cómo puedo desinstalar una aplicación usando PowerShell?
- 10. Cómo hacer json api
- 11. ¿Puedo conectarme a una API de Java con C#?
- 12. Usando Java, ¿puedo hacer que una JVM genere otra, y luego hacer que la original salga?
- 13. ¿Cómo puedo hacer un JAR desde .java
- 14. Descomprimir la respuesta HTTP de GZIP (usando la aplicación api de cliente de jersey, java)
- 15. ¿Cómo puedo iniciar una instancia de una aplicación usando Python?
- 16. ¿Cómo puedo hacer una aplicación de escritorio portátil de python?
- 17. ¿Cómo hacer una firma digital en una aplicación web (JavaScript) usando una tarjeta inteligente?
- 18. MonkeyRunner de Android ocasionalmente arroja excepciones
- 19. Ejecutando Monkeyrunner desde pydev
- 20. ¿Moviendo archivos en Hadoop usando la API de Java?
- 21. ¿Puedo hacer un video de una aplicación Java Swing en ejecución sobre la marcha?
- 22. hacer ePub con el API de Java
- 23. cómo verificar la versión de jre usando la aplicación java
- 24. Cómo puedo hacer un Java Daemon
- 25. ¿Cómo puedo cambiar el tamaño de una imagen usando Java?
- 26. ¿Cómo puedo hacer una imagen de fondo ruidosa usando PHP?
- 27. ¿Cómo puedo hacer la decodificación LZW en Java?
- 28. ¿Cómo hacer una consulta paginada usando ScalaQuery?
- 29. ¿Cómo puedo iniciar varias instancias de una aplicación usando launchd?
- 30. ¿Cómo puedo hacer una búsqueda con la API de búsqueda personalizada de Google para .NET?
Aparece un error con el device.getProperty. requerido: org.python.core.PyObject [], java.lang.String [] encontrado: java.lang.String –
debe haber utilizado device.getProperty (PyObject [] de punto de venta, cadena cadenas) en lugar del dispositivo. getProperty (String string) es mi mejor estimación. Por favor, publique su código para que pueda echarle un vistazo – Harkish
He usado SU código ... –