STF框架二次开发介绍[编辑]
概述[编辑]
STF 是由日本一家互联网公司以angularjs1.x为前端、nodejs为后台开发的远程管理与操作安卓手机的平台,并在github上面开放源代码。 地址:https://github.com/openstf/stf
STF发展历程[编辑]
STF平台最初开发是2010年开始,正式开放源码时间约为2014年5月份。开发管理者有两位:sorccu 和 gunta。后来有个人叫Vishal Banthia申请加入管理者,这个人把appium整合进入STF平台并定义了一个版本号v2.0,此版本不是官方版本。 最近jade模版引擎升级版本并改名pug,于是STF平台管理者不得不升级版本并修改了许多BUG,此版本为v1.2.0。
参考资料[编辑]
基本上来说二次开发的参考资料,是没有的。关于STF所有你遇到的问题基本上能在github的issue上面找到,没遇到的只能提交新的issue问管理员,当然要填好BUG LIST,不然没人理会。
了解STF平台的架构[编辑]
平台语言
使用html使用的是jade模版,后来因为jade改名为pug,因此现在使用的是pug模版引擎。
前端使用的是angularjs 1.x版本,虽然2016年5月份左右,google推出了angularjs2.0版本,但官方并不想更新angularjs的版本,继续使用1.x版本。如果改成2.0版本,相当于要重写平台。如果是重写平台,官方可能不会使用angularjs。
后端使用的是nodejs
数据库使用的是对象型数据库rethinkdb。至于为什么使用这个数据库,官方的回答是:看到新出来的rethinkdb,于是想尝试一下新的东西,于是就采用了。
STF平台组成
STF平台是由:stf,adbkit,STFService.apk,stf-syrup,adbkit-logcat,stf-device-db,adbkit-apkreader,minicap,minitouch,minirev等组件共同组成。
STF目录结构
/.tx transifex网站相关的配置,主要是用于其它语言翻译
/bin 启动文件,其实是链接到lib/cli.js
/docker Docker的相关配置
/lib 后端代码
/res 前端web的代码
/conf 应该是mysql的配置文件,但是目前没有使用,是个没用的配置
/doc 一些STF平台的说明
/test 检测平台的状态
/vendor 需要安装到手机上的应用或者服务
/node_modules npm相关的组件
/rethinkdb_data rethinkdb的数据库文件,建议在stf目录下执行rethinkdb
Package.json npm所需要安装的组件集,以json格式保存
…. 相它说明文件与打包文件
STF平台启动
先启动rethinkdb,再使用stf local启动平台,stf 后面可带参数,stf —help可查看帮助。
stf 命令其实是调用了stf目录下lib/cli.js这个文件执行的。
修改了后端代码/lib 需要使用命令 gulp clean。
这里我写了一个shell的启动脚本start.sh(在目录/var/stf/下面),可直接运行此脚本启动。
一般启动: ./start.sh
Ldap启动:./start.sh ldap
关于rethinkdb
Rethinkdb 属于对象型数据库,使用的是json字符串格式保存数据(不建议内嵌json超过三层)。其操作有异于关系型数据,但其扩展性比关系型数据库好,可随时在数据表中插入数据,不需要做数据关联操作。
modules组件
Node相关的modules组件使用的是npm的安装方式,而Package.json是所要安装的组件名及其版本号,格式如下图所示。如需要新增组件也可以直接使用npm install 组件名@版本号。如果安装不成功,大多数是因为网络问题,建议开启VPN进行下载。
Stfdevelop.png
Openstf相关的adbkit等组件有源代码可以修改,底层操作手机也是用adbkit这些组件来做的,详细的语法及使用可直接进入相关的github官网查看。
STF二次开发[编辑]
修改STF框架,前端直接修改res目录,后端可修改lib目录的文件。
1.前端
res目录结构
/app 前端代码
/auth 登录方式
/common 语言翻译相关
/test 登录的跳转与帮助等
/web_modules web样式
res 目录分为service与web,service主要用于后端通讯操作,而web是前端展示。 Service目录在res/app/component/stf目录下。 比如需要增加一个task(任务管理的界面),则新建一个task文件夹,里面创建几个文件:index.js、task-controller.js、task.pug等,如下图所示
Stfdevlop2.png
修改app目录下的app.js,增加require(‘./task’).name
Stfdevolop3.png
增加task的service在目录stf/res/app/components/stf/下增加目录task文件夹,并创建index.js与taskservice.js.详细请具体看代码
QQSTF.png
2.后端
以下是后端lib的目录
db 数据库操作
units 相关功能分类
util 工具集
Wire 未知
db 是数据操作文件,分为api.js,index.js,setup.js,tables.js。db 的操作只需要修改tables.js与api.js即可,其它两个文件可以不用修改。api.js主要用于数据库增删查操作
dbapi.Name = function(input){
return db.run(查询语句)
}
units是核心代码,根据其命名可得知其作用。需要增加什么功能就直接新建文件夹。
3.Rethinkdb
官网:www.rethinkdb.com
一般公司网络是连接不上rethinkdb的官网的,需要开VPN。
启动完rethinkdb后的可访问网址http://ip:8080,可进入webview的操作界面,可在web上面对数据库进行操作。
QQrethinkdb.png
4.数据通信方式
前端和后端使用两种通信协议:1、http协议;2、websocket协议(TCP协议)
http协议
前端发送请求:
angularjs前端发送http协议的代码主要是在-controller.js和-service.js文件中。例如:
-controller.js文件中http请求
QQget.png
-service.js文件中http请求
Oboe.png
后端处理请求:
nodejs后台接收到http请求后,会经过路由进行转发进行相应的处理;后台路由转发用的较多的文件是lib/units/app/index.js和lib/units/storage/temp.js。
在知道http请求的URL时可以通过查找来找到相应的URL路由处理文件。
后端路由处理如下图:
Appget.png
websocket协议(TCP协议)
STF中主要使用的是socket.io模块实现的websocket协议;使用socket.emit发送数据,使用socket.on接收数据。前端可以参考res/app/components/stf/control/control-service.js和res/app/components/stf/socket/socket-service.js两个文件中的相关实现;后端可以参考lib/units/websocket/index.js文件中的相关实现。
ZMQ通信方式(也拼写作ZeroMQ,)
STF项目中主要使用了ZMQ的:发布订阅模式(pub/sub),管道模式(push/pull)。STF项目中使用zmqutil.socket来创建相应的对象
5.日志
日志路径:项目中的日志存放在/var/stf/log目录下。
实时查看日志的命令是:tail -f /var/stf/log/logname
如何打印日志: 如果要打印日志需要引入lib/util/logger.js文件,创建log对象,使用log打印日志。
Logcat.png