В Android SDK есть API для отправки команд на телефон под названием Monkeyrunner. Кажется, это Python API. В любом случае я могу использовать его в приложении Java?
Как я могу создать приложение Java с помощью API Monkeyrunner?
Ответ 1
Ну, я пытался это сделать, вот что я нашел (спасибо 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.
Ответ 2
Вот обновление для ответа @Harkish, который работает с тем, что я считаю текущей версией 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.
Ответ 3
Я вскакиваю, чтобы предоставить еще один обновленный ответ. Это то же, что и разработчик 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 runner api
Ответ 4
Чтобы дополнить отличный ответ от 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>