背景是对monkey源码进行了改良:1️⃣一个 seed跑完后monkey会停在某个页面,需要强制退出应用以便于下一个seed重新打开应用开始跑2️⃣从多个连接的设备中识别到需要跑monkey的目标设备
一、从外部导jar包
跑monkey用到的adb命令是ddmlib包下面的,还需要用到其他的包:
ddmlib包在android-sdk里面,要导进来的话跟本地安装的路径有关,需要手动导
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 运行
如果没有设置主函数入口,用 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函数
导出的包在 META_INF 目录下,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文件;
第三个则把依赖库放到一个文件夹中。
例如
将项目分别用三种库处理方式,并导出为test.jar,然后将各个test.jar解压便可对三种方式一目了然。