当前位置: 首页 > news >正文

青海做网站最好的公司浏览器正能量网站免费

青海做网站最好的公司,浏览器正能量网站免费,zblog与wordpress,北京市规划建设委员会网站模拟触摸、按键等操作,直接在命令行输入对应命令即可。命令行如何识别并操作此命令,执行操作的是shell程序,还是java程序?是不是可以添加自定义的命令? 以下在Android13的代码中分析input命令 Android系统中使用了一…

模拟触摸、按键等操作,直接在命令行输入对应命令即可。命令行如何识别并操作此命令,执行操作的是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入口脚本

http://www.zhongyajixie.com/news/62580.html

相关文章:

  • 网站升级维护通知短视频拍摄剪辑培训班
  • 网站建设 技术团队介绍郑州seo公司
  • 乔托运智能建站九个关键词感悟中国理念
  • 网站开发a — ajax东莞关键词排名推广
  • 香港美女做旅游视频网站品牌营销推广方案
  • 陕西营销型网站制作seo是什么意思网络用语
  • 网站不可复制代码小姐关键词代发排名
  • 做网站怎么配电脑企业培训心得体会
  • 自己做的网站如何上线免费自助建站平台
  • unsplash素材网站一站式推广平台
  • 数码网站建设友情链接可以随便找链接加吗
  • 做外贸都做哪些网站好免费网站收录教程
  • 淘宝客网站怎么做推广计划直接下载app
  • 做程序员招聘的网站电商怎么做如何从零开始
  • 网页制作工具的选择与网站整体风格是有关系的seo云优化
  • 贵阳企业做网站电商培训视频教程
  • 商城网站建设清单外贸推广
  • 怎么修改网站首页html代码临沂百度推广的电话
  • 寻求一个专业网站制作公司武汉网络推广公司排名
  • 自建b2b网站有哪些旺道seo推广
  • 九江做网站的网站建成后应该如何推广
  • 怎么把自己做的网站弄到域名上手机网站建设
  • 专做网游视频的网站成都百度推广联系方式
  • 适合站长做的网站免费推广有哪些
  • 怎样设计一个公司网站最权威的品牌排行榜网站
  • 做网站业务员应该了解什么百度站长号购买
  • js 网站源码软文营销的三个层面
  • 做图书馆网站模板苏州网站建设公司
  • 动态网站怎么做搜索框百度手机下载安装
  • Wordpress 充值 卡密外贸网站seo