Linux环境下STF搭建&运行及踩坑记录

时间:2024-04-12 20:03:53

最初是在centos环境上搭建STF,由于种种依赖缺失、nodejs/npm版本不兼容、以及无解的“Segmentation fault (core dumped)”错误,最终还是以失败告终,转战Mac平台。踩坑记录写在搭建运行的后面,Linux 及 Mac中的坑都有涉及,由于文章篇幅较长,读者可自行查看所需。

一、STF是什么

STF (or Smartphone Test Farm) is a web application for debugging smartphones, smartwatches and other gadgets remotely, from the comfort of your browser.

作用:Web端远程批量管理多台Android设备,可支持超过160台

二、STF功能简介:

1、系统支持

(1)只支持Android系统,版本 2.3.3 (SDK level 10) to 7.1 (SDK level 25)

(2)支持Wear 5.1 (不支持 5.0 因为没有权限)

(3)支持 Fire OS, CyanogenMod,和其他Android发布系统

(4)root权限不是必须的

2、浏览器远程控制任意设备

(1)实时屏幕反馈

a.刷新速度可达30-40 FPS。

b.支持屏幕翻转

(2)支持电脑键盘输入

a.支持元键

b.支持复制粘贴

c.非拉丁语言有时会出现错误

(3)多点触控支持触摸屏上通过minitouch,两手指捏/旋转/缩放手势支持普通屏幕通过按Alt进行拖动

(4)支持拖动上传apk文件进行安装

a.支持在manifest指定要发起的主activity

(5)支持通过minirev进行端口转发

a.Android设备的端口转发到本地服务,即使不在同一个网络

(6)支持浏览器打开网站

a.支持实时监测并显示Android设备上已经安装的浏览器

b.支持用户选定的浏览器为默认浏览器

(7)支持执行shell命令并且可以看到实时输出

(8)可以显示Android设备日志并支持过滤

(9)支持用adb connect 命令连接远程设备,前提是该设备已经连接到本电脑,不管是否在同一个网络

a. 提供shell命令入口,可以执行任意shell命令

b.支持Android Studio和其他IDE,可以从浏览器查看你的app调试信息

(10)支持查看Android设备的文件系统

(11)支持VNC(处于进程中的)

(12)管理设备清单

a.查看任意设备的连接情况、离线/不可用、未经授权或拔出

b.查看谁在使用失败

c.搜索设备的电话号码、IMEI、ICCID,Android版本,运营商,产品名称和许多简单但功能强大的其他属性的查询

d.显示一个明亮的红色屏幕上的一个设备(您需要定位物理识别信息)

e.反馈电池电量和其他信息

f.应用商店账户管理

列出、删除、添加新账户(添加不一定在所有设备上有效)

g.显示硬件信息

h.简单的REST API

三、环境搭建:

mac上环境搭建比较简单,使用homebrew就可以安装以下stf依赖:

1、终端执行:brew install rethinkdb graphicsmagick zeromq protobuf yasm pkg-config

2、终端执行:npm install -g stf

Node.js >= 6.9 (latest stable version preferred)

ADB properly set up

RethinkDB >= 2.2

GraphicsMagick (for resizing screenshots)

ZeroMQ libraries installed

Protocol Buffers libraries installed

yasm installed (for compiling embedded libjpeg-turbo)

pkg-config so that Node.js can find the libraries

PS:执行上面第二步可能会卡住,这里可以用淘宝镜像cnpm来安装

(cnpm安装执行:npm install -g cnpm --registry=https://registry.npm.taobao.org)

终端执行:cnpm install -g stf

四、启动服务:

1、启动rethinkDB

终端执行:rethinkdb (MAC路径:/usr/local/Cellar/rethinkdb/2.3.5/)

PS:可以指定缓冲区大小和端口,终端执行:rethinkdb --bind all --cache-size 8192 --http-port 8090

2、启动STF

另起终端执行:stf local

PS:这里可以指定ip,如果不指定ip,浏览器打开地址:localhost:7100即可,如果指定ip,则添加参数--public-ip 10.180.184.113即可。

终端执行:stf local --public-ip 10.180.184.113

五、运行:

在浏览器打开 http://localhost:7100

PS:登录只需要输入Name和邮箱格式的字符串即可。

效果图:

Linux环境下STF搭建&运行及踩坑记录

六、踩坑记录

6.1、Linux 坑

6.1.1、安装好jdk, android sdk后,输入adb,提示“

adb: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by adb)

adb: /lib64/libc.so.6: version `GLIBC_2.15' not found (required by adb)”的错误信息

问题原因:libc库的版本低的原因,CentOS 的libc版本v2.14 要CentOS 7 才有支持 GLiBC_2.14, centos 6.5的libc版本为2.12

解决方法:

第一、查看系统glibc版本库

strings /lib64/libc.so.6 |grep GLIBC_

[[email protected] build]# strings /lib64/libc.so.6 |grep GLIBC_

GLIBC_2.2.5

GLIBC_2.2.6

GLIBC_2.3

GLIBC_2.3.2

GLIBC_2.3.3

GLIBC_2.3.4

GLIBC_2.4

GLIBC_2.5

GLIBC_2.6

GLIBC_2.7

GLIBC_2.8

GLIBC_2.9

GLIBC_2.10

GLIBC_2.11

GLIBC_2.12

GLIBC_2.13

GLIBC_2.14

GLIBC_2.15

GLIBC_PRIVATE

第二、下载和安装glibc2.14

wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz

tar -xzvf glibc-2.14.tar.gz

cd glibc-2.14

mkdir build

cd build

../configure --prefix=/opt/glibc-2.14

make && make install

第三、创建软链接

[[email protected] build]# cp -r /etc/ld.so.c* /opt/glibc-2.14/etc/

[[email protected] build]# ln -sf /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc.so.6

6.1.2、安装STF过程中出现:Node.js npm ERR! Failed at xxx install script 'node-gyp rebuild'

我在尝试方案二中解决了此问题。

方案一:升级gcc至更高版本 http://mirrors.opencas.org/gnu/gcc/

方案二:这个问题是 nodejs 一些版本的 bug,npm编译安装模块的时候没把对应的 bind 文件拷贝过去。解决办法是重新编译一遍,类似于这样: 

$ sudo npm install -g node-gyp

$ cd node_modules/libxmljs

$ node-gyp rebuild

参考: https://github.com/libxmljs/libxmljs/issues/253

6.1.3、nodejs版本问题(建议已编译版本安装)

参考了很多STF安装的文章,其中对于STF依赖nodejs版本的问题,用0.12.x、4.x、6.x、最新版本...各种都有,其中nodejs的安装也有多种方式,通过踩坑无数,验证了使用nodejs已编译好的版本,只需解压,打软连接就可以了。如果该版本不兼容也可以轻松删除,不会导致勿删其他软件自身所依赖的node文件。

6.1.4、源码方式安装nodejs(超级不建议)

如果你使用了该方式,那就要保证一次性用对nodejs的版本,因为在make&make install时,执行了大量脚本,自己不是不清楚而是压根就不知道和nodejs相关的文件都放在了哪里。就算是参考网上的测底删除nodejs文件的方法,也无法测底删除干净,而且还有很大概率导致你的其他软件不可用,比如Java,adb...等等

附删除nodejs默认安装文件(虽然没有什么用)

1》cd  /usr/local/lib 删除所有 node 和 node_modules文件夹

cd  /usr/local/include 删除所有 node 和  node_modules 文件夹

2》 cd  /usr/local/bin 

删除 node 的可执行文件

3》删除: /usr/local/bin/npm

删除: /usr/local/share/man/man1/node.1

删除: /usr/local/lib/dtrace/node.d

删除: rm -rf /home/[homedir]/.npm

删除: rm -rf /home/root/.npm

4》 find / -name node  

find / -name node_modules  

(特别要注意文件路径,有些事其他包安装的node文件,别删错了)(通常情况下都会勿删的)

6.1.5、如果误删了node文件,在执行一些命令的时候会出现“node.js 运行 npm失败:npm Segmentation fault (core dumped)”提示! 恭喜你来到这一步,我们先来说出现该问题的原因,然后在告诉你如何放大招来解决它。

出现该问题的原因是由于在安装nodejs的时候使用了源码安装的方式,到后面步骤时发现提示nodejs或npm版本低,或使用的nodejs版本有不兼容问题。无奈,你只能通过卸载nodejs来重新尝试安装可能没有问题的nodejs版本,但有可能你又安装了一个有问题的nodejs,又卸载,又安装....当你安装第n个版本后输入npm命令,出现了版本号,那在执行npm的其他命令依旧会报此错误提示。

或许是我太菜了,问题查了2天,无解。最终拿了一个全新的环境再次安装,最终可以执行stf安装命令