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.pathif (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:DockObserverSurfaceFlingeraccessibilityaccountactivityalarmandroid.security.keystoreandroid.service.gatekeeper.IGateKeeperServiceappopsappwidgetassetatlasaudiobackupbattery...
总结
今天我们探索了如何在 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 成立以来,以技术为根基、以客户为导向,产品被应用在头部股份制商业银行总行、大型保险公司、运营商总部以及研究院等众多客户和多个场景。