快速上手:在 Android 设备上运行 Pipy

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-A53arm64-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 安装包,并解压缩得到两个文件:pipylibc++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 脚本,在这个脚本中启动了监听在 80818082 端口的两个服务。第一个服务直接返回 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 成立以来,以技术为根基、以客户为导向,产品被应用在头部股份制商业银行总行、大型保险公司、运营商总部以及研究院等众多客户和多个场景。
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/269229.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VR 全景模式OpenGL原理

VR 全景模式OpenGL原理 VR 全景模式原理 VR 全景模式原理将画面渲染到球面上,相当于从球心去观察内部球面,观察到的画面 360 度无死角,与普通播平面渲染的本质区别在渲染图像部分,画面渲染到一个矩形平面上,而全景需…

【代码随想录算法训练营Day34】860.柠檬水找零;406.根据身高重建队列;452.用最少数量的箭引爆气球

❇️Day 34 第八章 贪心算法 part04 ✴️今日任务 860.柠檬水找零406.根据身高重建队列452.用最少数量的箭引爆气球 ❇️860.柠檬水找零 本题看上好像挺难,其实挺简单的,大家先尝试自己做一做。题目链接:https://leetcode.cn/problems/lem…

即时设计-高效易用的界面工具

界面工具是设计师的得力助手,为设计师快速创建精美易用的用户界面提供了丰富的功能和直观的界面。在众多的界面工具中,有的支持预设模板、图标库和样式库,有的更注重原型和互动。如何选择优秀的界面工具?这里有一个高效易用的界面…

python并发 map函数的妙用

1.map是什么? map函数是Python中的一个内置函数,用于将一个函数应用到一个或多个可迭代对象的每个元素上,生成一个新的可迭代对象。它的一般形式是: map(function, iterable1, iterable2, ...)其中,function是一个函…

JS逆向进阶篇【去哪儿旅行登录】【下篇-逆向Bella参数JS加密逻辑Python生成】

目录: 每篇前言:引子——本篇目的1、 代码混淆和还原(1)单独替换:(2)整个js文件替换: 2、算法入口分析3、 深入分析(0)整体分析:(1&am…

STM32启动过程及反汇编

STM32从Flash启动的过程,主要是从上电复位到main函数的过程,主要有以下步骤: 1.初始化堆栈指针 SP_initial_sp,初始化 PC 指针Reset_Handler 2.初始化中断向量表 3.配置系统时钟 4.调用 C 库函数_main 初始化用户堆栈&#xf…

华为配置WLAN高密业务示例

配置WLAN高密业务示例 组网图形 图1 配置高密WLAN环境网络部署组网图 业务需求组网需求数据规划配置思路配置注意事项操作步骤配置文件 业务需求 体育场由于需要接入用户数量很大,AP间部署距离较小,因此AP间的干扰较大,可能导致用户上网网…

Qt 中Qwidget相关属性

文章目录 1. QWidget 核心属性1.1 enabled1.2 geometry1.2.1 window frame 的影响 1.3 windowTitle1.4 windowIcon1.4.1 qrc的使用 1.5 windowOpacity1.6 cursor1.7 focusPolicy1.8 styleSheet 1. QWidget 核心属性 在 Qt 中, 使⽤ QWidget 类表⽰ “控件”. 像按钮, 视图, 输…

Shell管道和过滤器

一、Shell管道 Shell 还有一种功能,就是可以将两个或者多个命令(程序或者进程)连接到一起,把一个命令的输出作为下一个命令的输入,以这种方式连接的两个或者多个命令就形成了管道(pipe)。 重定…

应用方案 | D722 9MHz,轨对轨I/O CMOS运放,低噪声、低电压、低功耗运放,应用广泛

D722是低噪声、低电压、低功耗运放,应用广泛。D722具有9MHz的高增益带宽积,转换速率为8.5V/μs,静态电流为1.7mA(5V电源电压)。 D722具有低电压、低噪声的特点,并提供轨到轨输出能力,D722的最大…

Shell编程——条件测试(五)

在shell编程中,if语句本身不执行任何判断,它实际上接受一个程序作为参数,然后执行这个程序,并依据这个程序的返回值来判断是否执行相应的语句。 程序的返回值是0,则为真,反之则为假。 目录 test命令&…

SpringCloud搭建微服务之Consul服务注册与发现

1. Consul介绍 Consul是由HashiCorp公司使用Go语言开发的一款开源工具,主要用于实现分布式系统的服务发现和服务配置,其内置了服务注册与发现框架、分布式一致性协议实现、健康检查、Key-Value存储、多数据中心方案。Consul具有高可移植性,支…

《Redis 设计与实现》读书概要

注: 《Redis 设计与实现》一书基于 Redis 2.9 版本编写,部分内容已过时,过时之处本文会有所说明。本文为读书笔记,部分简单和日常使用较少的知识点未记录。原书网页版地址 https://redisbook.com/ 一、底层数据结构 SDS(Simple Dy…

654.最大二叉树

这段Java代码实现了一个名为Solution的类,其中包含两个方法:constructMaximumBinaryTree()和constructMaximumBinaryTree1(),目的是从给定的整数数组nums中构建出一个最大二叉树。以下是详细的注释说明: class Solution {// 主方…

某品零食交易平台设计与实现|基于springboot+ Mysql+Java的某品交易平台设计与实现(源码+数据库+文档+PPT)

目录 基于springboot MysqlJava的某品交易平台设计与实现 摘 要 系统详细设计 数据库设计 论文参考 源码获取 文末获取源码联系 基于springboot MysqlJava的某品交易平台设计与实现 摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的…

利用excel文件增量同步一个库的数据并自动校正两端数据库条数不一致

利用excel文件增量同步一个库的数据并自动校正两端数据库条数不一致 现在有sqlserver和mysql两个库上的表在进行同步,sqlserver上的是源表,mysql上是目标表。 我们就把sqlserver上的数据同步到mysql上 mysql 是没有数据的。 sqlserver的三个表只是创建了…

240多道!Go开发岗位面试题合集(含答案)

随着今年大环境的影响,找工作的人在今年达到顶峰,马上金九银十面试黄金季,很多人都想在这次面试中拿到心仪Offer。 数以百计的面试,为何迟迟无法顺利入职?能力无疑是至关重要的,可却有不少能力不比已入职的…

未来已来!AI大模型引领科技革命

未来已来!AI大模型正以惊人的速度引领着科技革命。随着科技的发展,人工智能在各个领域展现出了非凡的能力和潜力,大模型更是成为了科技领域的明星。从自然语言处理到图像识别,从智能推荐到语音识别,大模型的应用正在改…

Linux-信号3_sigaction、volatile与SIGCHLD

文章目录 前言一、sigaction__sighandler_t sa_handler;__sigset_t sa_mask; 二、volatile关键字三、SIGCHLD方法一方法二 前言 本章内容主要对之前的内容做一些补充。 一、sigaction #include <signal.h> int sigaction(int signum, const struct sigaction *act,struc…

阿里云2核4G服务器支持多少人在线?多少钱?

阿里云2核4G服务器多少钱一年&#xff1f;2核4G5M带宽优惠价格199元一年&#xff0c;轻量应用服务器2核4G4M带宽165元一年&#xff0c;2核4G服务器30元3个月&#xff0c;可以在阿里云官方活动查看2核4G配置详细报价 https://t.aliyun.com/U/bLynLC 阿里云2核4G服务器价格 2核4G…