快速上手:在 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.mzph.cn/news/721421.shtml

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

相关文章

根据用户名称实现单点登录

一、参数格式 二、后端实现 Controller层 public class IAccessTokenLoginController extends BaseController {Autowiredprivate ISysUserService sysUserService;Autowiredprivate ISingleTokenServiceImpl tokenService;/*** 登录方法** return 结果*/PostMapping("/l…

器件选型【二极管,电感篇】

二极管篇: 一句话总结:二极管选型时主要考虑二极管的最大反向电压,反向电流,最高工作频率(由结电容决定),反向恢复时间 二极管的主要作用是防反接,续流 二极管结电容: 在高频电路中&#xff…

JeecgBoot Vue3前端项目性能优化按需加载方案

JeecgBoot vue3前端项目在 3.5.5 版本之前,的确存在很严重的性能问题,大家可以参考以下文档进行升级。 按需加载改造方法 1、全局注册地方去掉2、组件改成异步注册3、用不到的大组件可以删掉 【精简项目方案】 大组件 1、富文本 tinyme2、Markdown3、…

NVIDIA GTC 2024将回归线下

NVIDIA 宣布将于 3 月 18 日至 21 日在圣何塞会议中心举办 GTC 2024 大会。预计将有超 30 万人亲临现场或线上注册参会。NVIDIA 创始人兼首席执行官黄仁勋将于太平洋时间 3 月 18 日(星期一)下午 1 点,即北京时间 3 月 19 日(星期…

前端- 基础 表单标签 - 使用场景及组成

大家都有到银行去办理业务的时候,大多数情况下会填一些 纸质的表之类的东西如下图 而我们在网页中也会经常遇到 像现实生活中在银行填表那样的情景,如下图 : 上示就是 网页中的表单的使用场景了 表单标签 : 为什么需要表单 …

290. Word Pattern一个击败了100C++用户的代码

题目描述 Given a pattern and a string s, find if s follows the same pattern. Here follow means a full match, such that there is a bijection between a letter in pattern and a non-empty word in s. Example 1: Input: pattern “abba”, s “dog c…

吴恩达机器学习笔记:第5周-9 神经网络的学习1(Neural Networks: Learning)

目录 9.1 代价函数9.2 反向传播算法9.3 反向传播算法的直观理解 9.1 代价函数 首先引入一些便于稍后讨论的新标记方法: 假设神经网络的训练样本有𝑚个,每个包含一组输入𝑥和一组输出信号𝑦,𝐿…

【2024】使用Vuetifi搭建vue3+Ts项目,并使用tailwind.css

目录 使用Vuetifi搭建项目使用tailwind.css 只要跟着官方文档来就不会出错。 使用Vuetifi搭建项目 npm create vuetifyyarn create vuetifypnpm create vuetifybun create vuetify在终端运行一个就行,之后就可以选配置了。 使用tailwind.css 先运行: …

【数据结构】数组、双链表代码实现

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…

Spring中最常用的11个扩展点

前言 我们一说到spring,可能第一个想到的是 IOC(控制反转) 和 AOP(面向切面编程)。 没错,它们是spring的基石,得益于它们的优秀设计,使得spring能够从众多优秀框架中脱颖而出。 除…

C++输入输出(I\O)

我们知道C是由C语言发展而来的,几乎完全兼容C语言,换句话说,你可以在C里面编译C语言代码。如下图: C语言是面向过程的语言,C在C语言之上增加了面向对象以及泛型编程机制,因此C更适合中大型程序的开发,然而C…

kafka(三)springboot集成kafka(1)介绍

一、相关组件介绍 1、pom&#xff1a; <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>3.0.0</version></dependency> </dependencies> 2、k…

vulhub中Wordpress 4.6 任意命令执行漏洞复现

由于Mysql初始化需要一段时间&#xff0c;所以请等待。成功运行后&#xff0c;访问http://your-ip:8080/打开站点&#xff0c;初始化管理员用户名和密码后即可使用&#xff08;数据库等已经配置好&#xff0c;且不会自动更新&#xff09;。 发送如下数据包&#xff0c;可见/tmp…

计网面试题整理上

1. 计算机网络的各层协议及作用&#xff1f; 计算机网络体系可以大致分为一下三种&#xff0c;OSI七层模型、TCP/IP四层模型和五层模型。 OSI七层模型&#xff1a;大而全&#xff0c;但是比较复杂、而且是先有了理论模型&#xff0c;没有实际应用。TCP/IP四层模型&#xff1a…

【三维重建】相移法+格雷码

本篇文章介绍一种稠密点云的获取方式——条纹结构光三维重建算法。 在学习此算法前&#xff0c;我们需要对基于视觉的三维重建算法有一定了解。 需要了解什么是相机模型、相机标定以及三角化的相关知识。 【三维重建】摄像机几何-CSDN博客 【三维重建】摄像机标定&#xff…

微信小程序-2

数据绑定 index.js Page({data: {info: hello world,randomNumber: Math.random() * 10,imgSrc:http://www.itheima.com/images/logo.png} })index.wxml <view>{{ info }}</view><view>{{ randomNumber > 5 ? 随机数大于等于5 : 随机数小于5 }}</v…

低密度奇偶校验码LDPC(七)——SPA和积译码算法的简化

往期博文 低密度奇偶校验码LDPC&#xff08;一&#xff09;——概述_什么是gallager构造-CSDN博客 低密度奇偶校验码LDPC&#xff08;二&#xff09;——LDPC编码方法-CSDN博客 低密度奇偶校验码LDPC&#xff08;三&#xff09;——QC-LDPC码概述-CSDN博客 低密度奇偶校验码…

神经网络推理优化方法总结

&#x1f380;个人主页&#xff1a; https://zhangxiaoshu.blog.csdn.net &#x1f4e2;欢迎大家&#xff1a;关注&#x1f50d;点赞&#x1f44d;评论&#x1f4dd;收藏⭐️&#xff0c;如有错误敬请指正! &#x1f495;未来很长&#xff0c;值得我们全力奔赴更美好的生活&…

Jenkins 的安装(详细教程)

文章目录 一、简介二、安装前准备三、windows 安装与启动1. 方式一2. 方式二3. 方式三 四、创建管理员用户五、常用设置1. 配置镜像地址2. 更改工作目录3. 开启可注册用户4. 全局变量配置 一、简介 官网&#xff1a;https://www.jenkins.io 中文文档&#xff1a;https://www.j…

【MGR】MySQL Group Replication快速开始

目录 17.2 Getting Started 17.2.1 Deploying Group Replication in Single-Primary Mode 17.2.1.1 Deploying Instances for Group Replication 17.2.1.2 Configuring an Instance for Group Replication Storage Engines Replication Framework Group Replication Sett…