自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Techgogogo

做个有追求的全栈程序员。当前在做的产品-晓日程: http://xricheng.com。自主博客: http://techgogogo.com; 最新动向: 回炉重造高数线代概论,为机器学习打基础...

原创 自己动手实现区块链

简介 本教程将带领大家从零开始开发一套可行的加密货币系统。开发的基本原则就是尽量的简单易懂。 我们打造的这个项目的名称叫做Naivecoin。 用的开发语言是Typescript。总共分为六个章节。大家可以选择相应的分支进去查看相应的代码。 如果你只是对区块链的实现原理感兴趣,那么你只需要看第一章...

2019-06-23 11:53:14

阅读数 477

评论数 0

原创 晓日程-首款打通微信和桌面的免费日历应用

新年伊始,新年新决心, 各大网站到处大肆标榜高效率人士是如何提高生产率的,其中一个共同点就是如何高效的利用好有限的时间。什么有效的单位时间划分,番茄工作法, GTD(Get Things Done),《清单革命》等方法论和书籍再次随着大家的唾沫子到处传播。 作为缺乏运动而免疫力底下且脑洞长期大开的...

2019-03-13 10:21:30

阅读数 122

评论数 0

原创 nodejs通过lodash合并去重由unixtime和Date组成的两个数组

1. 问题起源 最近在实现一个API,其中有一部分功能是需要从Mongodb中取出一个由Date对象组成的数组,然后将客户端传过来的unixtime合并到该数组中,并且去重复。 比如,假设从mongodb中取回来的数据中有一个叫做gaming的项,专门用来记录用户进入游戏的开始时间和退出时...

2017-04-28 13:32:48

阅读数 5277

评论数 0

原创 小白学react之调用微信jssdk实战

本打算网上找个react调用微信的jssdk的实例进行学习的,但可惜搜索了半天而未果,只有一些基于其他框架的。估计是大牛们都觉得太简单或者太忙了,懒得提笔花几个小时来给我们做个Demo。对于处于快速学习年代的我们,一个可以运行起来的示例是多么的重要。希望本示例可以起到抛砖引玉的作用,让大家能快速的...

2017-04-23 11:30:12

阅读数 6002

评论数 2

原创 小白学react之网页获取微信用户信息

通过上一篇《小白学react之EJS模版实战》我们学习了如何通过EJS模版生成我们高定制化的index.html文件。本篇我们将会继续延续我们的alt-tutorial项目的实战计划,去获取微信扫码用户的信息,并将头像显示在我们页面的右上角上。最终实战效果将如下所示。首先根据我们的网站url生成二...

2017-04-23 11:29:05

阅读数 4373

评论数 0

原创 小白学react之EJS模版实战

通过上一篇《小白学react之由FOUC引发的一次webpack变革》我们学习了webpack的一些高级用法,比如如何生成哈希文件,如何将开发和生产配置分离,如何解决FOUC问题,以及如何运用html格式的模版来自动生成我们的index.html。但是在尝试将我们的应用部署到我的一个阿里云服务器上...

2016-10-12 12:38:56

阅读数 2259

评论数 0

原创 小白学react之由FOUC引发的一次webpack变革

上一篇《小白学react之页面BaseLayout框架及微信的坑》我们学习了如何为各个Components提供一个基础的父框架组件来处理不同页面的Title的显示和Style样式的显示。今天本人会尝试就自己踩到的一个坑开始,通过对webpack做进一步的修改,来学习更高级点的webpack相关的知...

2016-10-12 12:37:26

阅读数 1579

评论数 0

原创 小白学react之页面BaseLayout框架及微信的坑

上一篇《小白学react之SASS实战》我们学习了如何通过运用sass来为我们的应用页面“上色”,加入css的支持。但是我们到现在为止,每个页面的标题还是系统默认的,这多多少少显得不专业: 今天我的目标就是为所有页面提供一个通用的基础布局框架,以便在同一个地方控制不同页面的布局,比如背景颜色以及...

2016-10-12 12:35:55

阅读数 1274

评论数 0

原创 小白学react之SASS实战

上一篇《小白学react之restful api获取服务器数据实战》我们学习了如何通过superagent的两个模块提供的功能,调用远程Express服务器上通过restful api提供的数据,并且学习了如何打造一个简单的Express api服务器。今天本人准备将我们的示例应用alt-tuto...

2016-10-12 12:34:19

阅读数 1710

评论数 0

原创 小白学react之restful api获取服务器数据实战

通过上一篇文章《[小白学react之React Router实战](http://techgogogo.com/2016/09/react_router/)》我们学习了在React Router的基本功能,并根据路由功能建立了一个导航栏,可以方便的切换查看Locations和About。 但是,...

2016-09-29 15:38:02

阅读数 6163

评论数 0

原创 小白学react之React Router实战

通过上一篇文章《[小白学react之altjs下的Action和Store](http://techgogogo.com/2016/09/altjs_action_store/)》我们学习了在alt框架下的Action和Store的特色,以及对alt-tutorial的代码做了重构,让其更简洁且各...

2016-09-29 08:06:33

阅读数 731

评论数 0

原创 微信应用号开发知识贮备之altjs的Action和Store

过上一篇文章《[微信应用号开发知识贮备之打通React Component任督二脉](http://techgogogo.com/2016/09/altcontainer/)》我们学习了AltContainer是如何通过对Component职责的解绑,让Component的尽可能的关注在如何进行页...

2016-09-27 20:43:02

阅读数 608

评论数 0

原创 微信应用号开发知识贮备之打通React Component任督二脉

随着微信应用号的呼之欲出,相信新一轮的APP变革即将发生。作为行业内人士,我们很应该去拥抱这个趋势。这段时间在忙完工作之余准备储备一下这方面的知识点,以免将来被微信应用号的浪潮所淹没...

2016-09-25 20:45:11

阅读数 1026

评论数 0

原创 微信应用号开发知识贮备之Webpack实战

随着微信应用号的呼之欲出,相信新一轮的APP变革即将发生。作为行业内人士,我们很应该去拥抱这个趋势。这段时间在忙完工作之余准备储备一下这方面的知识点,以免将来被微信应用号的浪潮所淹没 通过上一篇《微信应用号开发知识贮备之altjs官方实例初探》,我们已经将altjs的官方实例所用到的依赖包升到...

2016-09-24 10:49:58

阅读数 1900

评论数 0

原创 微信应用号开发知识贮备之altjs官方实例初探

天地会珠海分舵注:随着微信应用号的呼之欲出,相信新一轮的APP变革即将发生。作为行业内人士,自己之前从来没有做过web及webapp开发,所以这方面算是一名小白。时下最热的技术栈当然还是围绕着javascript的nodejs,mongodb,express, angularjs,HTML5,re...

2016-09-23 09:12:11

阅读数 777

评论数 0

原创 开辟新战场,打造新的商业模式

在当今商业竞争异常激烈的年代,“差异化”和“革新”这两个词被广泛的交替使用,人们对它们之间的差别已经变得越来越模糊。比如我们经常会听到人说,我们要革新我们的商业模式,对我们的产品重新进行定位,找到有差异化的新商业模式和产品定位。其实它们之间是有着明显的区别的,“差异化”形容的是当前事物和旧事物还是...

2016-04-22 09:13:18

阅读数 1521

评论数 0

原创 需求驱动还是技术驱动,大跃进的聊天机器人在开着一辆往历史倒退的车

F8大会的那个引爆的聊天机器人相信大家已经耳熟能详,但我们真的是需要这样的一个聊天机器人吗?Facebook是在大跃进穿越未来,还是在开着历史的倒车呢?李敖有话说:“是这样吗?真的是这样子吗?”

2016-04-22 09:10:33

阅读数 6036

评论数 0

原创 第14章9节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-遍历控件树查找控件

到了现在,万事已经俱备,控件树这个东风也已经就绪了,我们也终于可以火烧赤壁大展拳脚,通过控件的ID在控件树中找到我们想要的控件了。 HierarchyViewer只允许用户通过控件的ID去查找控件,这比Robotium,UiAutomator和Appium这些框架是少了很多查找控件的方式的,但聊胜...

2015-12-08 11:02:18

阅读数 1963

评论数 1

原创 第14章8节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-获取控件列表并建立控件树

在上几节的描述中,我们把HierarchyViewer初始化好,也把ViewServer给装备好了。那现在距离获得一个控件去操作它是万事具备只欠东风了,欠了那一股春风了?欠了的是建立控件树这个东风,因为HierarchyViewer根据ID去获取一个控件之前是需要先建立好控件树,然后从该控件树上根...

2015-12-08 11:01:46

阅读数 1941

评论数 0

原创 第14章7节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-获取版本号

这里获取的版本号有两个,一个是ViewServer自身的版本号,一个是ViewServer当前使用协议的版本号。 我们这里为什么需要获取ViewServer版本以及其协议版本呢?其实主要原因是ViewServer有些功能在老版本上是不支持的,比如HierarchyViewer在列出当前所有Acti...

2015-12-08 11:00:57

阅读数 1709

评论数 0

原创 第14章6节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-启动ViewServer

在获得ViewServer的运行状态后,如果ViewServer还没有启动的话,HierarchyViewer的setupViewServer的下一步就会去启动ViewServer。调用的方法是DeviceBridge.startViewServer,我们进去看看:190 public s...

2015-12-08 11:00:24

阅读数 1702

评论数 0

原创 第14章5节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-查询ViewServer运行状态

上一小节我们描述了HierarchyViewer是如何组建ADB协议命令来实现ViewServer的端口转发的,在端口转发设置好后,下一个要做的事情就是去检测目标设备端ViewServer线程是否已经启动起来了。我们进入setupViewServer调用的DeviceBridge的isViewSe...

2015-12-08 10:59:54

阅读数 1652

评论数 0

原创 第14章4节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-装备ViewServer-端口转发

在初始化HierarchyViewer的实例过程中,HierarchyViewer会调用自己的成员方法setupViewServer来把ViewServer装备好,那么我们这里先看下这个方法: 39 private void setupViewServer() { 40 ...

2015-12-08 10:57:43

阅读数 1574

评论数 0

原创 第14章3节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer实例化

既然要使用HierarchyViewer来获取控件信息,那么首先我们看下在脚本中,我们是怎么获得HierarchyViewer的,看下面一段脚本代码:1 device = MonkeyRunner.waitForConnection() 2 device.wake() 3 device.sta...

2015-12-08 10:56:02

阅读数 1623

评论数 0

原创 第14章2节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-HierarchyViewer架构概述

HierarchyViewer库的引入让MonkeyRunner可以以面向控件的方式进行脚本编写,那么它是怎么做到这一点的呢?它的实现原理又是怎么样的呢?在这一小节开始我们就会开始一起揭开它的神秘面纱。 HierarchyViewer这个框架的工作需要ViewServer的协同工作,它们是以CS(...

2015-12-08 09:18:28

阅读数 1809

评论数 0

原创 第14章1节《MonkeyRunner源码剖析》 HierarchyViewer实现原理-面向控件编程VS面向坐标编程

到此为止我们描述的MonkeyRunner对应用的点击拖放等操作都是直接通过指定坐标点来实现的,比如下面触摸一个坐标点为(60,90)的按钮的脚本例子:1 device.touch(60,900,MonkeyDevice.DOWN_AND_UP)代码14-1-1 直接使用坐标点操作应用  这样子做...

2015-12-08 09:17:42

阅读数 1455

评论数 0

原创 第8章7节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-小结

最后我们对MonkeyRunner启动的过程做一个总结,当然,其中也包括启动Monkey,虽然它不属于启动过程的一部分:monkeyrunner这个shell脚本会先设置一些运行环境的系统属性保存到JVM的System.Propery里面然后该脚本会通过java -jar直接运行sdk下面的mon...

2015-12-08 09:16:19

阅读数 1240

评论数 0

原创 第8章6节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动Monkey

大家可能会觉得奇怪,为什么启动目标设备端的monkey进程会放在“运行测试脚本”这一节之后来阐述。 纵观前面整个MonkeyRunner的启动流程,我们看到并没有提及到monkey进程启动的地方。那么就奇怪了,monkey是什么时候被MonkeyRunner启动起来的呢? 我们的测试脚本一开始时几...

2015-12-08 09:15:42

阅读数 1514

评论数 0

原创 第8章5节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行测试脚本

MonkeyRunner在准备好AndroidDebugBridge和DeviceMonitor等服务之后,就基本上是解决了和目标设备通信的问题了,那往下需要做的就是把测试脚本运行起来了。178 public static void main(String[] args) { 179 ...

2015-12-08 09:15:14

阅读数 1392

评论数 0

原创 第8章4节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge

上一节我们看到在启动AndroidDebugBridge的过程中会调用其start方法,而该方法会做2个主要的事情:715行startAdb:开启AndroidDebugBridge722-723行:初始化android设备监控并启动DeviceMonitor设备监控线程。 其中第一点我们上一小节...

2015-12-08 09:14:34

阅读数 1808

评论数 0

原创 第8章3节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-启动AndroidDebugBridge

用户在命令行运行monkeyrunner命令来执行测试脚本的时候ADB服务器有可能还没有起来,AndroidDebugBridge类的主要作用之一就是去开启一个新的进程来启动ADB服务器,这样我们的测试脚本才能发送命令给ADB服务器去驱动目标设备做事情,比如安装或者删除待测应用的安装包等。 Mon...

2015-12-08 09:13:40

阅读数 1396

评论数 0

原创 第8章2节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-解析处理命令行参数

MonkeyRunnerStarter是MonkeyRunner启动时的入口类,因为它里面包含了main方法.它的整个启动过程主要做了以下几件事情:解析用户启动MonkeyRunner时从命令行传输进来的参数: 因为MonkeyRunner需要根据指定的参数才能做事情,比如输入的一个需要执行的脚本...

2015-12-08 09:13:01

阅读数 1474

评论数 0

原创 第8章1节《MonkeyRunner源码剖析》MonkeyRunner启动运行过程-运行环境初始化

首先大家应该清楚的一点是,MonkeyRunner的运行是牵涉到主机端和目标设备端的,流程控制逻辑代码是在PC端运行的,但很多命令请求的执行是在目标机器端执行的。这不像其他框架如UiAutomator是所有东西都完全在目标设备端运行的。 这里我们首先应该去看的不是MonkeyRunnerStart...

2015-12-08 08:45:05

阅读数 1082

评论数 0

原创 第6章8节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-小结

本章我们重点围绕处理网络过来的命令的MonkeySourceNetwork这个事件源来阐述学习Monkey是如何处理MonkeyRunner过来的命令的。以下总结下MonkeyRunner从启动Monkey开始到如何处理完成一个命令的流程总结如下:MonkeyRunner通过ADB发送shell命...

2015-12-08 08:44:11

阅读数 1077

评论数 0

原创 第6章7节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-注入按键事件实例

在事件生成并放入到命令队列后,Monkey类的runMonkeyCycles就会去调用相应事件源的getNextEvent来获的事件来执行事件注入,那么这一小节我们通过MonkeyKeyEvent这个事件的注入方法来看下事件注入过程是怎么样的。 往系统注入按键事件最终是通过调用InputManag...

2015-12-08 08:43:19

阅读数 1217

评论数 0

原创 第6章6节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令队列

事件源在获得字串命令并把它翻译成对应的MonkeyEvent事件后,会把这些事件排队放入一个由事件源维护的队列,然后其他地方如Monkey类的runMonkeyCycles方法就可以去把队列里面的事件取出来进一步进行处理了。那么这里我们先看下属于MonkeySourceNetwork内部类的命令队...

2015-12-08 08:42:31

阅读数 1013

评论数 0

原创 第6章5节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-事件

从网络过来的命令字串需要解析翻译出来,有些命令会在翻译好后直接执行然后返回,但有一大部分命令在翻译后需要转换成对应的事件,然后放入到命令队列里面等待执行。Monkey在取出一个事件执行的时候主要是执行其injectEvent方法来注入事件,而注入事件根据是否需要往系统注入事件分为两种:需要通过系统...

2015-12-08 08:41:39

阅读数 1198

评论数 0

原创 第6章4节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-翻译命令字串

在第2节中我们看到了MonkeySourceNetwork是如何从Socket中获取MonkeyRunner发送过来的命令字串的,但是最后如何将它翻译成事件的代码我们还没有进行分析,因为在那之前我们还没有了解命令翻译类的相关知识。那么经过第3小节对命令翻译类的学习后,我们就可以继续往下分析Monk...

2015-12-08 08:40:29

阅读数 1015

评论数 0

原创 第6章3节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-命令翻译类

每个来自网络的字串命令都需要进行解析执行,只是有些是在解析的过程中直接执行了事,而有些是需要在解析后创建相应的事件类实例并添加到命令队列里面排队执行。负责这部分工作的就是命令翻译类。那么我们往下还是继续在MonkeySourceNetwork这个范畴中MonkeyCommand类是怎么一回事: ...

2015-12-08 08:39:34

阅读数 1047

评论数 0

原创 第6章2节《MonkeyRunner源码剖析》Monkey原理分析-事件源-事件源概览-获取命令字串

从上一节的描述可以知道,MonkeyRunner发送给Monkey的命令是以字符串的形式交互的,那么事件处理的第一步当然是先去获得MonkeyRunner发送过来的字串命令了。 在事件源MonkeySourceNetwork初始化的时候构造函数会创建一个ServerSocket来监听来自客户端的链...

2015-12-08 08:38:23

阅读数 1108

评论数 0

提示
确定要删除当前文章?
取消 删除