【问题标题】:How can I make a Java app using the Monkeyrunner API?如何使用 Monkeyrunner API 制作 Java 应用程序?
【发布时间】:2011-10-04 21:24:01
【问题描述】:

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

【问题讨论】:

    标签: java android python api monkeyrunner


    【解决方案1】:

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

    这是一个使用 monkeyrunner 打印设备名称的 Java 小程序

    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。

    【讨论】:

    • 我收到 device.getProperty 错误。必需:org.python.core.PyObject[],java.lang.String[] 找到:java.lang.String
    • 您一定使用了 device.getProperty(PyObject[] pos,String strings) 而不是 device.getProperty(String string) 是我的最佳猜测。请把你的代码贴出来让我看看
    • 对不起,无法理解为什么,上面的代码对我有用
    • @Harkish 也遇到了同样的错误。你能发布你正在使用的jar版本吗
    • @Harkish 我知道这个问题很老了,但你知道你使用的是哪个 jar 版本吗?如果我问了类似的问题,你能回答第 26 版吗?
    【解决方案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
    

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

    【讨论】:

      【解决方案3】:

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

      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 classes

      【讨论】:

      • 工作得很好而且很快。在 Mac 上,我在添加 jar 时遇到了挑战,因为我不想将它们复制到其他地方。我只是为 ~/Library/Android 文件夹创建了一个别名,并使用将外部 jar 添加到我的 eclipse 项目中。现在正在尝试通过 Maven 找到更好的使用方法。注意 - 要获取每个属性的值 MonkeyRunner 必须将每个属性的一个事件发送到设备,在我的例子中是模拟器。但有效
      • 适用于 Android API 28
      • 结合 device.takeSnapshot().writeToFile("out.png", null);使用此代码会引发设备无响应异常。我猜它是某种版本不匹配,因为我正在使用 bluestack 模拟器进行尝试
      • @Gautam 你能告诉我你从哪里得到的 jar 文件,是否也可以命名所有的 jar 文件?
      【解决方案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>
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-16
      • 1970-01-01
      • 2013-02-12
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多