当前位置: 首页 > news >正文

什么网站可以做任务赚钱/杭州旺道企业服务有限公司

什么网站可以做任务赚钱,杭州旺道企业服务有限公司,做外贸做的很好的网站,国内最大网站制作公司0x0 概述本文不涉及如何使用monkey,官网说得够详细了,网上资料也一大堆。本文着重探讨monkey的实现原理,以及基于这些原理,我们可以做些什么?本文涉及的Monkey的源码位于AOSP的development项目的cmds目录下。0x1 Monke…

0x0 概述

本文不涉及如何使用monkey,官网说得够详细了,网上资料也一大堆。本文着重探讨monkey的实现原理,以及基于这些原理,我们可以做些什么?本文涉及的Monkey的源码位于AOSP的development项目的cmds目录下。

0x1 Monkey事件触发原理

Monkey的主要作用是,发送一些随机交互事件模拟人的随机操作。它是如何触发各种事件的呢?

1.1 触摸事件

触摸事件包括屏幕以及物理键的触摸,滑动,点击事件。我们可以通过发送一些adb命令模拟这些事件。不过Monkey实现时,直接调用hiden API实现。

InputManager.getInstance().injectInputEvent(keyEvent, int)

构造需要的事件,然后调用该接口就能触发了。

2. Activity事件

Activity事件是指我们调用Android系统组件的事件。一般测试中,我们也是通过adb shell am命令来实现的。Monkey在实现是,是直接通过IActivityManager实例:

//同样通过hiden API获得IActivityManager实例

IActivityManager am = ActivityManagerNative.getDefault();

//利用IActivityManager接口打开Activity

am.startActivity();

3. Window事件

Window事件是指操作Window的事件,例如转屏。这里直接用IWindowManager实现。

//获得IWindowManager实例

IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.getService("window"));

//调用IWindowManager接口转屏

wm..thawRotation();

此外还会调用其他的一些hiden API获取崩溃信息,ANR信息等等。这些直接从底层hiden接口拿,比我们上层获取更加方便,准确。

0x2 Monkey的框架设计

上一节分析到Monkey的功能主要分成两块:

产生事件;

触发事件。

因此它的框架设计非常简洁,核心类是Monkey.java, MonkeyEventSource.java, MonkeyEvent.java。

核心类

说明

Monkey

程序的入口,同时也是调度中心,根据参数选择合适的MonkeyEventSource,并适时触发MonkeyEvent。

MonkeyEventSource

MonkeyEvent的工厂,是一个接口。它有各种实现,例如随机生成MonkeyEvent,根据配置文件生成MonkeyEvent,根据网络数据生成MonkeyEvent等等。

MonkeyEvent

各种事件的具体实现,是一个抽象类,不同事件有不同实现。在Monkey中各种活动都是事件,除了基本的触摸事件,Activity事件外,事件之间的停顿也是通过一个MonkeyThrottleEvent来实现。这样概念的扩展,将各种活动一视同仁的对待,使设计变得简单。

如果我们需要扩展Monkey的功能,只需要增加自己实现的MonkeyEventSource和MonkeyEvent即可。

0x3 Monkey的运行原理

我们在terminal中执行adb shell monkey,实际上是执行手机中/system/bin/monkey这个脚本(在源码中也能看到),该脚本具体内容是

# Script to start "monkey" on the device, which has a very rudimentary

# shell.

#

base=/system

export CLASSPATH=$base/framework/monkey.jar

trap "" HUP

exec app_process $base/bin com.android.commands.monkey.Monkey $*

所以他是通过/system/bin/app_process运行/system/framework/monkey.jar。

app_process的核心源码是app_main.cpp

它会新建一个native进程,初始化虚拟机,从CLASSPATH找到我们定义的Main Class,并把参数传给它。可以参考Android系统进程Zygote启动过程的源代码分析。

0x4 自定义可执行jar包

根据上一节的分析,可以通过exec app_process直接执行一个jar包。所以理论上我们可以自己写一个jar包,丢给它执行。可以参考一下解析android framework下利用app_process来调用java写的命令及示例。

这里需要注意,JVM中的jar文件是一对class文件的zip包。而在Android中,可执行文件是dex,所以Android里面的jar本质上里面也是dex,直接把eclipse导出的jar包放进去是无法执行的。

这里也有一个小例子(可以在附件中下载完整代码):

/**

* Android可执行jar测试。

* 测试程序会每隔三秒钟写一次文件,报告自己还活着,可以测试该程序的运行时长。

*

* 使用方式:

* 1. 利用android_jar.sh一键生成一个dex文件test.dex;

* 2. 将testJar放到/data/local/tmp/目录下,并授予执行权限;

* 3. 运行testJar文件。

* Created by shangjie on 2016/11/9.

*/

public class Monkey {

public static void main(String[] args) {

Process.setArgV0("io.light.monkey");

System.out.println("Process start");

Monkey main = new Monkey();

main.run();

System.exit(0);

}

public void run() {

File file = Environment.getExternalStorageDirectory();

file = new File(file, "ali_jar_process.txt");

if (file.exists()) {

boolean isDelete = file.delete();

println("Delete file: " + isDelete);

}

try {

boolean result = file.createNewFile();

println("Create file: " + result);

} catch (IOException e) {

e.printStackTrace();

}

SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd_HH:mm:ss");

int i = 0;

while (i < 900) {

String time = sdf.format(new Date());

String content = time + " I am still live.";

println(content);

writeFile(file, content);

try {

Thread.sleep(3000);

} catch (InterruptedException e) {

e.printStackTrace();

}

i ++;

}

}

void writeFile(File file, String mValue) {

try (BufferedWriter bw = new BufferedWriter(new FileWriter(file, true))) {

bw.newLine();

bw.write(mValue);

bw.flush();

} catch (Exception e) {

e.printStackTrace();

}

}

static void println(String msg) {

System.out.println(msg);

}

}

我可以看到它成功运行了:

进一步分析该进程,通过ps命令,我们看到该进程是属于shell用户组的,因此它没有root,system那样高的权限,但是比一般的用户进程权限也要高很多,可以多做很多事情,例如静默地安装,卸载。

通过查看该进程的oom_adj文件,我们知道他的ADJ值是-17,根据源码ProcessList-17是NATIVE_ADJ是不受系统控制的,理论上不会被系统杀掉,可以一直运行,不过我自己的测试中,发现还是会die,还在分析原因。从我们直观经验中,monkey,UiAutomator的确可以运行很久。

0x5 总结

上述Monkey的分析同样适用于UiAutomator等Android内部的测试工具,更重要的是,我们可以基于这些原理实现我们自己的功能强大,且稳定可靠的测试工具。

0x6 引用

http://www.lbrq.cn/news/100477.html

相关文章:

  • 免费的短视频app大全安卓/优化大师在哪里
  • 云南做网站公司哪家好/互联网平台推广
  • 淘宝天猫做网站咨询/常用的网络推广方式有哪些
  • 定制开发网站的公司/一个新产品策划方案
  • seo网站推广公司/百度提交工具
  • 如何做企业交易网站/搜索引擎广告形式有
  • 网站后台管理系统怎么用/页面关键词优化
  • 一次性核酸病毒采样管价格/北京seo百科
  • 域名备案期间 网站访问/实时积分榜
  • 海尔集团的电子商务网站建设/嘉兴seo
  • 一个好的产品怎么推广/申泽seo
  • wordpress 视频 slider/湖南企业seo优化推荐
  • 免费在线网站建设/百度精简版入口
  • 织梦做商城类网站教程/seo优化是什么
  • crm系统软件排名/重庆seo教程
  • 淘宝客做网站教程/9个广州seo推广神技
  • 网站建设 自动生成/百度一下百度主页
  • 一个专门做试题的网站/怎么网上宣传自己的产品
  • 网站建设公司主营业务/新的网站怎么推广
  • 网站开发常用的开发工具/公司网页制作
  • 目前国内有哪些网站做家具回收/代做百度收录排名
  • 软件网站开发合同/个人seo外包
  • 品牌网吴为简介/霸榜seo
  • 申通物流的网站建设/关键词优化公司
  • 网站建设需求分析要做的事/在线优化工具
  • 网站建设绵阳辉煌电商/949公社招聘信息
  • 梧州做网站建设/苏州疫情最新消息
  • wordpress 全站 下载/网络营销方式对比分析
  • 微企免费网站建设/seo做关键词怎么收费的
  • ps做网站 字体多大/网站的推广方法
  • 2026年计算机毕设推荐:基于大数据的慢性肾病数据可视化分析系统技术选型指南【Hadoop、spark、python】
  • 【数据分享】中国371个城市的坡度矢量数据和excel数据
  • 日语学习-日语知识点小记-构建基础-JLPT-N3阶段(18):文法+单词第6回1
  • leetcode-python-242有效的字母异位词
  • C语言基础习题——01
  • Python-Pandas GroupBy 进阶与透视表学习