monkey本地运行的问题记录及学习总结

背景是对monkey源码进行了改良:1️⃣一个 seed跑完后monkey会停在某个页面,需要强制退出应用以便于下一个seed重新打开应用开始跑2️⃣从多个连接的设备中识别到需要跑monkey的目标设备

一、从外部导jar包

跑monkey用到的adb命令是ddmlib包下面的,还需要用到其他的包:


需要用到的包

ddmlib包在android-sdk里面,要导进来的话跟本地安装的路径有关,需要手动导

导jar包路径配置


选择从外部导jar包


SDK--tools--lib目录下jar包

lib目录下,多选快捷键:可点击第一个jar包,按住shift再点击最后一个包

二、重写日志输出参数

根据executeShellCommand的参数说明 com.android.ddmlib.IDevice.executeShellCommand(String arg0, IShellOutputReceiver arg1) 

准备重写第二个参数IShellOutputReceiver 

而 1️⃣public abstract class com.android.ddmlib.MultiLineReceiver implements com.android.ddmlib.IShellOutputReceiver

2️⃣public class LogOutputReceiver extends MultiLineReceiver  

重写后就变成:adb.getDevices().excecuteShellCommand(commandName,LogOutputReceiver)

三、不同导包方式 & java -jar 与 java -cp 不同运行方式

前言:JAR File和Runnable JAR File的区别? 

The runnable jar contains a MANIFEST.MF file, which defines the Main class to be executed when the jar is run. The “Main-Class” must be defined so the java runtime knows which class to call when the jar is “run.” 

If a jar does not include a manifest with the “Main-Class:” it is not considered a “runnable jar” - it is just a library of Java code.

因为导出jar包导的方法不对,在运行java -jar时提示没有主清单属性,


搜了一些文档,这里涉及到两个问题


1、导出jar包: jar file 用 java -cp

导出 jar file 仅仅是把.class打包了 用 java -cp 运行

jar file


设置主函数入口,main函数的所在文件

如果没有设置主函数入口,用 java -cp 的话后面需要带上 包名+类名

用 java -jar xxx.jar 会报错没有主清单属性。


没有主清单属性

以 jar file导出的为普通的jar,在导出的时候没有指定main函数所在类,即没有执行的入口,所以不能运行.

ps:如果你还应用到另外的lib库,你必须在cp里说明,也就是  java -cp .;lib01.jar;lib02.jar com.xxx.class名 来执行

(-cp 和 -classpath 一样,是指定类运行所依赖其他类的路径,通常是类库,jar包之类,需要全路径到jar包,window上分号“;”分隔,linux上是分号“:”分隔。不支持通配符,需要列出所有jar包,用一点“.”代表当前路径。)

2、导出jar包: runnable jar file 用 java -jar            

项目导出 runnable jar file 包时,Launch configuration的类一定要有main函数


设置main函数所在的类(一定要有main函数)

导出的包在 META_INF 目录下,MANIFEST.MF 文件里面有指定 main-class


MANIFEST.MF 文件里面有指定 main-class


即runnable jar包中指明哪个类先执行,所以你可以用 java -jar xxx.jar来执行你想要执行的代码,而不必指明具体哪个类。

若导包过程中设置的 Launch configuration的类无main函数,则会报错


找不到或无法加载主类

ps:Launch configuration选项只能上下拉菜单选择,如何出现在菜单里呢。最简单的,把需要选择的类现在本地运行一遍~

四、导 runnable jar file 包,对依赖的 lib 库的不同打包方式


三种不同方式

library handling中:第一个为提取extract需要的依赖的库或jar合成到一个jar 文件里;

第二个则仅仅打包依赖库到各自的jar文件;

第三个则把依赖库放到一个文件夹中。

例如

需要引用的第三方jar包

将项目分别用三种库处理方式,并导出为test.jar,然后将各个test.jar解压便可对三种方式一目了然。


第一种方式


第二种方式


第三种方式
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 3,375评论 0 3
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 137,100评论 19 139
  • /Library/Java/JavaVirtualMachines/jdk-9.jdk/Contents/Home...
    光剑书架上的书阅读 4,221评论 2 8
  • ajax调用错误处理当一个Ajax调用返回一个404或500的错误时,将执行该错误处理。如果该处理未定义,则其他j...
    守心向暖阅读 282评论 0 0
  • 在对于仪式和庆典这样的事已经渐渐地淡漠,生活中让人兴奋的东西越来越少了的今天,至少我们应该好好做一顿饭,然...
    林居记录阅读 506评论 0 0

友情链接更多精彩内容