Как я могу создать приложение Java, используя API Monkeyrunner? - PullRequest
13 голосов
/ 14 июля 2011

Android SDK имеет API для отправки команд на телефон под названием Monkeyrunner. Похоже, это Python API. Могу ли я использовать его в приложении Java?

Ответы [ 4 ]

8 голосов
/ 31 июля 2011

Ну, я пытался сделать это, вот что я нашел (Спасибо Google и некоторая помощь от пользователей в Интернете)

Вот небольшая Java-программа, которая использует monkeyrunner для печати названия устройства

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();
 }

}

Чтобы приведенный выше код тоже работал, мне нужно было включить следующие jars monkeyrunner, ddmlib, jython, guavalib, sdklib.

5 голосов
/ 17 мая 2013

Вот обновление ответа @ Харкиша, которое работает с тем, что я считаю текущей версией 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();
    }
}

Зависимости библиотеки:

chimpchat.jar, common.jar, ddmlib.jar, guava-13.0.1.jar, sdklib.jar

Они могутвсе они находятся в подкаталоге sdk/tools/lib пакета ADT.

4 голосов
/ 27 августа 2013

Я прыгаю, чтобы дать еще один обновленный ответ. Это то, что также посоветовал разработчик Google. Я думаю, что это более надежная реализация и использует больше отказоустойчивых методов.

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();
    }
  }

Вы можете просмотреть все свойства устройств с помощью:

for (String prop: device.getPropertyList()) {
    System.out.println(prop + ": " + device.getProperty(prop));
}

Для получения информации об API вы можете посмотреть документы здесь: классы API Monkey Runner

1 голос
/ 25 октября 2015

Просто чтобы дополнить отличный ответ от ValarDohaeris, здесь приведены текущие зависимости в формате 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>
...