Pipy 作为一个高性能、低资源消耗的可编程代理,通过支持多种计算架构和操作系统,Pipy 确保了它的通用性和灵活性,能够适应不同的部署环境,包括但不限于云环境、边缘计算以及物联网场景。它能够在 X86、ARM64、海光、龙芯、RISC-V 等架构上运行,支持众多 Linux 发行版,以及 FreeBSD、macOS、Windows 和国产操作系统。
总有用户问起 Pipy 能否运行在 Android 上运行,今天就来探索如何在 Android 平台上运行 Pipy。
环境准备
测试环境:
- 本地 macOS 地址为
10.1.1.18
- 安装 Android 命令行工具 adb(macOS 上可通过
brew install android-platform-tools
安装) - Android 设备地址为
10.1.1.97
(该设备 CPU 用的是 Cortex-A53,arm64-v8a 架构)
在开始之前,确保 Android 设备上已经开启开发者模式。通过 adb connect
命令无线连接到设备。
adb connect 10.1.1.97:5555
connected to 10.1.1.97:5555
可以通过命令查看当前已连接的设备。
adb devices
List of devices attached
10.1.1.97:5555 device
安装 Pipy
接下来 下载 Pipy Android 安装包,并解压缩得到两个文件:pipy 和 libc++shared.so,分别是二进制文件和动态链接库。
通过 adb push
命令将其复制到设备中,这里设备目录我们使用 /data/local/tmp
。
adb push pipy /data/local/tmp
adb push libc++_shared.so /data/local/tmp
安装完 Pipy 之后,我们通过 adb shell
通过命令行访问设备,并验证 Pipy 运行情况。
LD_LIBRARY_PATH=. ./pipy -v | grep Version
Version : 0.99.0-2
测试
在 Android 设备上可以通过命令 dumpsys SERVICE_NAME
来获取系统服务信息,有了 Pipy 我们就可以通过 HTTP 来查看系统信息。
下面是一个十几行的 js 脚本,在这个脚本中启动了监听在 8081
和 8082
端口的两个服务。第一个服务直接返回 Hi Pipy!
;第二个服务定义了几个 API,可以返回 CPU 以及其他的系统信息。
pipy.listen(8081, $=>$.serveHTTP(new Message('Hi Pipy!')))
pipy.listen(8082, $ => $.serveHTTP(
function (req) {
var path = req.head.path
if (path === '/cpu') {
var cpuF = pipy.exec('getprop ro.product.cpu.abi').toString().trim('\n')
return new Message(cpuF)
} else if (path.startsWith('/dump/')) {
var service = path.substring(6)
var sysInfo = pipy.exec(`dumpsys ${service}`).toString().trim('\n')
return new Message(sysInfo)
} else {
return new Message({status: 400}, 'Bad Request!')
}
}
))
在设备上新建一个文件,比如 main.js
,将脚本的内容复制进去。
接下来执行命令来启动服务。
LD_LIBRARY_PATH=. ./pipy main.js
你将看到 Pipy 成功启动并监听端口。
2024-02-28 07:21:44.963 [INF] [listener] Listening on TCP port 8081 at 0.0.0.0
2024-02-28 07:21:44.964 [INF] [listener] Listening on TCP port 8082 at 0.0.0.0
2024-02-28 07:21:44.964 [INF] [worker] Thread 0 started
现在可以发起请求来验证了。
curl http://10.1.1.97:8081
Hi Pipy!
查看 CPU 信息。
curl http://10.1.1.97:8082/cpu
arm64-v8a
查看 cpu 占用。
curl -s http://10.1.1.97:8082/dump/cpuinfo | grep -i total
18% TOTAL: 16% user + 1.8% kernel + 0% softirq
也可以通过下面的请求查看当前运行了哪些服务,然后通过 API /dump/SERVICE_NAME
来查看对应服务的信息。
curl http://10.1.1.97:8082/dump/-l
Currently running services:
DockObserver
SurfaceFlinger
accessibility
account
activity
alarm
android.security.keystore
android.service.gatekeeper.IGateKeeperService
appops
appwidget
assetatlas
audio
backup
battery
...
总结
今天我们探索了如何在 Android 设备上运行 Pipy,并演示如何通过编程方式使用 HTTP 获取设备的运行状态。通过这个过程,我们不仅可以看到 Pipy 处理网络请求的能力,还能了解到其执行本地命令的功能。
Pipy 提供的 丰富 API 支持 开启了无限的可能性,让我们能够以更灵活、创新的方式利用这个工具。无论是开发者还是技术爱好者,都能通过 Pipy 实现各种复杂的网络交互和数据处理任务,从而充分发挥 Android 设备的潜能。
关于 Flomesh
Flomesh(易衡科技)成立于 2018 年,自主研发并开源了高性能可编程代理 Pipy(https://github.com/flomesh-io/pipy)。以 Pipy 为基础,Flomesh 研发了软件负载均衡、服务网格两款软件产品。为工信部认证的可信云产品、可信开源项目。
Flomesh 核心竞争力来自完全自研的核心组件 Pipy,该组件高性能、高可靠、低延迟、可编程、可扩展、低依赖,采用 C++ 开发,内置自研的 JS 引擎,支持适用 JS 脚本做扩展开发。支持包括 x86、arm、龙芯、海光等硬件 CPU 架构;支持 Linux、FreeBSD、OpenWrt 等多种核心的操作系统。
Flomesh 成立以来,以技术为根基、以客户为导向,产品被应用在头部股份制商业银行总行、大型保险公司、运营商总部以及研究院等众多客户和多个场景。