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