Android 自定义shell命令
模拟触摸、按键等操作,直接在命令行输入对应命令即可。命令行如何识别并操作此命令,执行操作的是shell程序,还是java程序?是不是可以添加自定义的命令?
以下在Android13的代码中分析input命令
Android系统中使用了一款叫mksh的shell程序,用于交互式的命令解释器。
mksh
mksh是一款开源的命令解释器(shell),aosp中的源码路径是external/mksh,编译后会在/system/bin下生成 "sh"可执行程序,init.rc中配置了开机启动这个二进制程序。当"sh"启动后,终端工具上就会出现我们常知的命令解释器,可以输入shell命令进行操作。
init.rc中定义了名为"console"的service,service对应的可执行程序是sh这个二进制,这个二进制程序由 exteranl/mksh/Android.bp定义。
service console /system/bin/shclass coreconsoledisableduser shellgroup shell log readprocseclabel u:r:shell:s0
src/main.c中定义一些指令
static const char *initcoms[] = {Ttypeset, Tdr, initvsn, NULL,Ttypeset, Tdx, "HOME", TPATH, TSHELL, NULL,Ttypeset, "-i10", "COLUMNS", "LINES", "SECONDS", "TMOUT", NULL,Talias,"integer=\\\\builtin typeset -i","local=\\\\builtin typeset",/* not "alias -t --": hash -r needs to work */"hash=\\\\builtin alias -t","type=\\\\builtin whence -v","autoload=\\\\builtin typeset -fu","functions=\\\\builtin typeset -f","history=\\\\builtin fc -l","nameref=\\\\builtin typeset -n","nohup=nohup ","r=\\\\builtin fc -e -","login=\\\\builtin exec login","ll=\\ls -all",NULL,/* this is what AT&T ksh seems to track, with the addition of emacs */Talias, "-tU",Tcat, "cc", "chmod", "cp", "date", "ed", "emacs", "grep", "ls","make", "mv", "pr", "rm", "sed", Tsh, "vi", "who", NULL,NULL
};
可在此处添加命令。如:ll=ls -all
cmd命令的入口在frameworks/native/cmds/cmd,在cmd.cpp的cmdMain方法中,根据命令获取对应service
int cmdMain(const std::vector<std::string_view>& argv, TextOutput& outputLog, TextOutput& errorLog, int in, int out, int err, RunMode runMode) {sp<ProcessState> proc = ProcessState::self();proc->startThreadPool();......sp<IServiceManager> sm = defaultServiceManager();if (sm == nullptr) {ALOGW("Unable to get default service manager!");errorLog << "cmd: Unable to get default service manager!" << endl;return 20;}int argc = argv.size();if (argc == 0) {errorLog << "cmd: No service specified; use -l to list all running services. Use -w to start and wait for a service." << endl;return 20;}......const auto cmd = argv[serviceIdx];Vector<String16> args;String16 serviceName = String16(cmd.data(), cmd.size());......sp<IBinder> service;if(waitForService) {service = sm->waitForService(serviceName);} else {service = sm->checkService(serviceName);}......status_t error = IBinder::shellCommand(service, in, out, err, args, cb, result);
首先获取ServiceManage,根据命令获取对应的service,sm->checkService(serviceName);
通过service执行命令IBinder::shellCommand(service, in, out, err, args, cb, result);
因此执行cmd命令的是Java程序,如果执行input命令,需要一个service,系统中InputManagerService处理cmd命令
@Overridepublic void onShellCommand(FileDescriptor in, FileDescriptor out, FileDescriptor err, String[] args, ShellCallback callback, ResultReceiver resultReceiver) {new InputShellCommand().exec(this, in, out, err, args, callback, resultReceiver);}
最终InputShellCommand执行命令。
此时命令行还不能识别input命令。需要要添加命令入口
frameworks/base/cmds/input,
#!/system/bin/sh
cmd input "$@"
添加自定义shell命令步骤:
1.创建service,添加到servicemanager中
2.创建命令执行类ShellCommand
3.添加cmd入口脚本
相关文章:
Android 自定义shell命令
模拟触摸、按键等操作,直接在命令行输入对应命令即可。命令行如何识别并操作此命令,执行操作的是shell程序,还是java程序?是不是可以添加自定义的命令? 以下在Android13的代码中分析input命令 Android系统中使用了一…...
Unity游戏环境交互系统
概述 交互功能使用同一个按钮或按钮列表,在不同情况下显示不同的内容,按下执行不同的操作。 按选项个数分类 环境交互系统可分为两种,单选项交互,一般使用射线检测;多选项交互,一般使用范围检测。第一人…...
TOP K问题:利用堆排序找出数组中最小的k个数
设计一个算法,找出数组中最小的k个数。以任意顺序返回这k个数均可。 找小的数需要建大堆来解决,首先将数组中前K个数建成一个大堆,将从k1个数直到数组结束的所有数与堆顶的数进行比较,如果比堆顶的数小,则替换堆顶的数…...
《信息传播:人工智能助力驱散虚假信息阴霾》
在信息爆炸的时代,虚假信息和谣言如同脱缰野马,肆意传播,对社会秩序和公众生活造成了严重影响。人工智能作为一种强大的技术工具,正逐渐成为信息传播的有力助手,为防止虚假信息和谣言扩散提供了新的途径。 虚假信息和…...
数据权限和角色权限区别
1、概念 角色权限(Role-Based Access Control, RBAC)和数据权限(Data Access Control)是两种不同的权限管理策略,它们在权限控制的侧重点和应用场景上有所区别: 角色权限(RBACÿ…...
Flink的多流转换(分流-侧输出流、合流-union、connect、join)
在实际应用中,我们可能要将多个不同来源的数据连接合并在一起进行处理,也有可能要将一条流拆分成多条流进行处理,这就涉及到了Flink的多流转换问题。简单来说,就是分流和合流两大操作,分流主要通过侧输出流实现&#x…...
DirectUI属性表
<?xml version"1.0" encoding"UTF-8"?> <Controls><Window parent""><Attribute name"size" default"0,0" type"SIZE" comment"窗口的初始化大小,如(800,600)"/><Attribu…...
RBAC权限控制
1、Spring Security 是一个功能强大的Java安全框架,它提供了全面的安全认证和授权的支持。 2 SpringSecurity配置类(源码逐行解析) Spring Security的配置类是实现安全控制的核心部分 开启Spring Security各种功能,以确保Web应…...
STM32高级物联网通信之以太网通讯
目录 以太网通讯基础知识 什么是以太网 互联网和以太网的区别 1)概念与范围 (1)互联网 (2)以太网 2)技术特点 (1)互联网 (2)以太网 3)应用场景 (1)互联网 (2)以太网 以太网的层次 1)物理层 2)数据链路层 OSI 7层模型 TCPIP 4层模型 一些常见…...
【小程序】全局配置window和tabBar
目录 全局配置 1. 全局配置文件及常用的配置项 全局配置 - window 1. 小程序窗口的组成部分 2. 了解 window 节点常用的配置项 编辑 3. 设置导航栏的标题 4. 设置导航栏的背景色 5. 设置导航栏的标题颜色 6. 全局开启下拉刷新功能 7. 设置下拉刷新时窗口的背景色 …...
详解VHDL如何编写Testbench
1.概述 仿真测试平台文件(Testbench)是可以用来验证所设计的硬件模型正确性的 VHDL模型,它为所测试的元件提供了激励信号,可以以波形的方式显示仿真结果或把测试结果存储到文件中。这里所说的激励信号可以直接集成在测试平台文件中,也可以从…...
冥想的实践
这是我某一天的正念和冥想实践,我对正念练习、冥想练习进行了分别的统计。 正念练习:1分钟**5次 冥想:15分钟10分钟 正念练习,基本在工作休息时间练习。当然,工作过程中,也有一部分时间会有正念的状态&am…...
STM32F103RCT6学习之四:定时器
1.基础 定时器可以对输入的时钟进行计数,并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元,在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能,而且还包含内外时钟源选择、输入捕获、…...
如何在网页端使用 IDE 高效地阅读 GitHub 源码?
如何在网页端使用 IDE 高效地阅读 GitHub 源码? 前言什么是 GitHub1s?使用 GitHub1s 阅读 browser-use 项目源码步骤 1: 打开 GitHub 项目页面步骤 2: 修改 URL 使用 GitHub1s步骤 3: 浏览文件结构步骤 4: 使用代码高亮和智能补全功能步骤 5: 快速跳转和…...
易基因: BS+ChIP-seq揭示DNA甲基化调控非编码RNA(VIM-AS1)抑制肿瘤侵袭性|Exp Mol Med
大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 肝细胞癌(hepatocellular carcinoma,HCC)早期复发仍然是一个具有挑战性的领域,其中涉及的机制尚未完全被理解。尽管微血管侵犯(…...
欢迪迈手机商城设计与实现基于(代码+数据库+LW)
摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本欢迪迈手机商城就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息…...
数据库基础与应用:从概念到实践
数据库是信息技术中的核心组件之一,是现代计算机系统中不可或缺的部分。无论是日常应用的社交网络、电子商务网站,还是企业级的大型系统,几乎所有的信息管理都离不开数据库。那么,数据库究竟是什么?它是如何工作的&…...
jenkins集成工具(一)部署php项目
目录 什么是CI 、CD Jenkins集成工具 一、Jenkins介绍 二、jenkins的安装和部署 环境部署 安装jenkins 安装gitlab 配置镜像源进行安装 修改密码 安装git工具 上传测试代码 Jenkins部署php项目wordpress 发布php代码 安装插件 测试代码发布 实现发布成功发送邮件…...
17_HTML5 Web 存储 --[HTML5 API 学习之旅]
HTML5 Web 存储(Web Storage)是 HTML5 引入的一种在用户浏览器中存储数据的机制。它提供了比传统的 cookies 更加方便和强大的功能,包括更大的存储空间、更好的性能以及更简单的 API。Web 存储主要分为两种类型:localStorage 和 s…...
GCP Cloud Architect exam - PASS
备考指南 推荐视频课程 https://www.udemy.com/course/google-cloud-architect-certifications/?couponCodeKEEPLEARNING 推荐题库 https://www.udemy.com/course/gcp-professional-cloud-architect-exam-practice-tests-2024/?couponCodeKEEPLEARNING 错题集 http…...
实测避坑:用华为Atlas 300I DUO推理卡跑Qwen1.5-14B,性能对比3090和配置踩坑全记录
华为Atlas 300I DUO推理卡实战评测:Qwen1.5-14B部署全流程与性能深度对比 当国产AI加速卡遇上千亿参数大模型,会碰撞出怎样的火花?最近半年,我陆续测试了市面上主流的7款推理加速设备,这次终于轮到华为Atlas 300I DUO这…...
别再死记硬背!用Python(SymPy库)自动推导DC-DC变换器的小信号模型
用Python解放双手:SymPy自动推导DC-DC变换器小信号模型的工程实践 当电源工程师面对Buck、Boost电路的小信号模型推导时,那些繁琐的矩阵运算和拉普拉斯变换是否让你头疼不已?传统手工推导不仅耗时费力,还容易在代数运算中出错。本…...
Cat-Catch实战手册:5个场景快速掌握网页资源抓取技巧
Cat-Catch实战手册:5个场景快速掌握网页资源抓取技巧 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否经常遇到这样的困境?在线课程视频无法下载、设计素材图片无法批量保…...
foobox-cn:foobar2000现代化DUI皮肤配置的终极音乐管理方案
foobox-cn:foobar2000现代化DUI皮肤配置的终极音乐管理方案 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn foobox-cn是为foobar2000播放器设计的现代化默认用户界面(DUI&…...
告别Vue组件匿名时代:用vite-plugin-vue-setup-extend给你的<script setup>加个名字
为Vue组件正名:vite-plugin-vue-setup-extend深度整合指南 在Vue 3的组合式API开发中,<script setup>语法糖以其简洁性赢得了开发者的青睐。但当你打开Vue DevTools准备调试时,满屏的"Anonymous Component"是否曾让你感到困扰…...
告别彻夜等待:SteamShutdown让游戏下载完成后自动关机的智能解决方案
告别彻夜等待:SteamShutdown让游戏下载完成后自动关机的智能解决方案 【免费下载链接】SteamShutdown Automatic shutdown after Steam download(s) has finished. 项目地址: https://gitcode.com/gh_mirrors/st/SteamShutdown 你是否也曾经历过这样的困扰&a…...
G-Helper:华硕笔记本轻量化控制工具全面解析与实战指南
G-Helper:华硕笔记本轻量化控制工具全面解析与实战指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops. Control tool for ROG Zephyrus G14, G15, G16, M16, Flow X13, Flow X16, TUF, Strix, Scar and other models 项目地…...
ColorControl专业调校指南:从问题诊断到显示优化的参数配置全流程
ColorControl专业调校指南:从问题诊断到显示优化的参数配置全流程 【免费下载链接】ColorControl Easily change NVIDIA display settings and/or control LG TVs 项目地址: https://gitcode.com/gh_mirrors/co/ColorControl 一、问题诊断:你的显…...
CLIP-GmP-ViT-L-14多场景:新闻图解自动配文与虚假信息识别联动
CLIP-GmP-ViT-L-14多场景:新闻图解自动配文与虚假信息识别联动 你有没有想过,当你在新闻网站上看到一张图片时,旁边的文字描述是怎么来的?是编辑手动写的,还是机器自动生成的?更关键的是,你怎么…...
DAMO-YOLO赛博朋克UI实战:CSS3神经突触动画+玻璃拟态设计解析
DAMO-YOLO赛博朋克UI实战:CSS3神经突触动画玻璃拟态设计解析 今天,我们来聊聊如何把一个顶级的AI视觉引擎,包装成一个让人看一眼就忘不掉的“赛博朋克控制台”。你可能会好奇,一个目标检测系统,界面做得再酷有什么用&…...
