如何使用Monkeyrunner API制作Java应用?

13 投票
4 回答
8858 浏览
提问于 2025-04-16 21:28

Android开发工具包里有一个叫Monkeyrunner的功能,可以用来给手机发送指令。这个功能看起来是用Python语言写的。请问有没有办法在Java应用程序里使用它呢?

4 个回答

5

我来补充一个更新的回答。这也是谷歌开发者建议的做法。我觉得这个实现更稳妥,使用了更多的安全方法。

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的信息,你可以查看这里的文档:monkey runner API 类

6

这是对@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

它们都可以在ADT包的sdk/tools/lib子目录中找到。

9

我一直在尝试做这个,下面是我找到的一些信息(感谢谷歌和网上一些朋友的帮助)

这里有一个小的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();
 }

}

为了让上面的代码正常工作,我需要包含以下一些库文件:monkeyrunner、ddmlib、jython、guavalib和sdklib。

撰写回答