Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Monkeyrunner API制作Java应用程序?_Java_Android_Python_Api_Monkeyrunner - Fatal编程技术网

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

如何使用Monkeyrunner API制作Java应用程序?,java,android,python,api,monkeyrunner,Java,Android,Python,Api,Monkeyrunner,Android SDK有一个API,用于向手机发送命令,称为Monkeyrunner。它似乎是一个Python API。在Java应用程序中,我可以使用它吗?我一直在尝试这样做,以下是我的发现(感谢谷歌和互联网上的一些成员的帮助) 下面是一个小Java程序,它使用monkeyrunner打印设备的名称 import com.android.monkeyrunner.MonkeyDevice; import com.android.monkeyrunner.adb.AdbBackend; pub

Android SDK有一个API,用于向手机发送命令,称为Monkeyrunner。它似乎是一个Python API。在Java应用程序中,我可以使用它吗?

我一直在尝试这样做,以下是我的发现(感谢谷歌和互联网上的一些成员的帮助)

下面是一个小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();
 }
}


为了使上述代码也能正常工作,我需要包括以下JAR monkeyrunner、ddmlib、jython、guavalib、sdklib。

以下是@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
子目录中找到。

我现在开始提供另一个更新的答案。这也是谷歌开发人员建议的。我认为它是一个更可靠的实现,并且使用了更多的故障安全方法

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

有关API的信息,您可以在此处查看文档:

为了补充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>

24.3.1
net.sf.sociaal
黑猩猩聊天
22.6.3
番石榴
番石榴
18
com.android.tools
sdklib
${com.android.tools.version}
com.android.tools
常见的
${com.android.tools.version}
com.android.tools
sdk通用
${com.android.tools.version}
com.android.tools.ddms
ddmlib
${com.android.tools.version}

device.getProperty出现错误。必需:org.python.core.PyObject[],java.lang.String[]找到:java.lang.String您必须使用device.getProperty(PyObject[]pos,String String)而不是device.getProperty(String String)是我的最佳猜测。请张贴您的代码,以便我可以有一个在itI很抱歉,无法理解为什么,上面的代码的工作me@Harkish我也得到了同样的错误。你能把你想要的jar版本贴出来吗using@Harkish我知道这个问题很老了,但是你知道你用的是哪个jar版本吗?如果我问了一个类似的问题,你能为版本26回答吗?目前,最新的lib似乎运行得相当好和快。在Mac上,我很难添加jar,因为我不想将它们复制到其他地方。我只是为~/Library/Android文件夹创建了一个别名,并将外部JAR添加到我的eclipse项目中。现在正试图通过Maven找到更好的使用方法。注意-要获取每个属性的值,MonkeyRunner必须为每个属性向设备发送一个事件,在我的例子中是emulator。但是有效地与Android API 28结合使用设备.takeSnapshot().writeToFile(“out.png”,null);此代码引发设备无响应异常。我猜这是某种版本的不匹配,因为我正在用bluestack进行尝试emulator@Gautam你能告诉我你是从哪里得到jar文件的吗?如果你也能说出所有jar文件的名字吗?
<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>