如何让Android系统或Android应用执行shell脚本

作者&投稿:左芸 (若有异议请与网页底部的电邮联系)
怎么让Android系统或Android应用执行shell脚本~

一、Android应用启动服务执行脚本
1 如何写服务和脚本
在android源码根目录下有/device/tegatech/tegav2/init.rc文件相信大家对这个文件都不陌生(如果不明白就仔细研读下android启动流程)。如果在该脚本文件中添加诸如以下服务:
service usblp_test /data/setip/init.usblpmod.sh
oneshot
disabled
注解:每个设备下都会有自己对应的init.rc,init.设备名.rc脚本文件。oneshot disabled向我们说明了在系统启动的时候这个服务是不会自动启动的。并且该服务的目的是执行/data/setip/init.usblpmod.sh脚本。脚本的内容你可以随便写,只要符合shell语法就可以了,比如脚本可以是简单的设置eth0:
# ! /system/bin/sh //脚本的开头必须这样写。
Ifconfig eth0 172.16.100.206 netmask 255.255.0.0 up//设置ip的命令
2、如何在应用中启动服务
1)首先了解下在服务启动的流程
1. 在你的应用中让init.rc中添加的服务启动起来。
首先了解下在服务启动的流程:
在设备目录下的init.c(切记并不是system/core/init/init.rc)
Main函数的for(;;)循环中有一个handle_property_set_fd(),函数:
for (i = 0; i < fd_count; i++) {
if (ufds[i].revents == POLLIN) {
if (ufds[i].fd == get_property_set_fd())
handle_property_set_fd();
else if (ufds[i].fd == get_keychord_fd())
handle_keychord();
else if (ufds[i].fd == get_signal_fd())
handle_signal();
}
}
这个函数的实现也在system/core/init目录下,该函数中的check_control_perms(msg.value, cr.uid, cr.gid)函数就是检查该uid是否有权限启动服务(msg.value就是你服务的名字),如果应用为root或system用户则直接返回1.之后就是调用handle_control_message((char*) msg.name + 4, (char*) msg.value),该函数的参数就是去掉1.ctl.后的start和2.你服务的名字。这个函数的详细内容:
void handle_control_message(const char *msg, const char *arg)
{
if (!strcmp(msg,"start")) {
msg_start(arg);
} else if (!strcmp(msg,"stop")) {
msg_stop(arg);
} else if (!strcmp(msg,"restart")) {
msg_stop(arg);
msg_start(arg);
} else {
ERROR("unknown control msg '%s'
", msg);
}
}
匹配start后调用msg_start.服务就这样起来了,我们的解决方案就是在检查权限的地方“下点功夫”,因为我们不确定uid,所以就让check_control_perms这个函数不要检查我们的uid,直接检查我们服务的名字,看看这个函数:
static int check_control_perms(const char *name, unsigned int uid, unsigned int gid) {
int i;
if (uid == AID_SYSTEM || uid == AID_ROOT)
return 1;
/* Search the ACL */
for (i = 0; control_perms[i].service; i++) {
if (strcmp(control_perms[i].service, name) == 0) {
if ((uid && control_perms[i].uid == uid) ||
(gid && control_perms[i].gid == gid)) {
return 1;
}
}
}
return 0;
}
这个函数里面是必须要检查uid的,我们只要在for循环上写上。
if(strcmp(“usblp_test”,name)==0) //usblp_test就是我们服务的名字。
return 1;
这样做不会破坏android原本的结构,不会有什么副作用。
init.c和init.rc都改好了,现在就可以编译源码了,编译好了装到机子开发板上就可以了。

android系统执行shell脚本,需要首先确认用户具有修改shell的权限,使用 process来执行指令,如下代码:
public void execShell(String cmd){
try{
//权限设置
Process p = Runtime.getRuntime().exec("su"); //开始执行shell脚本
//获取输出流
OutputStream outputStream = p.getOutputStream();
DataOutputStream dataOutputStream=new DataOutputStream(outputStream);
//将命令写入
dataOutputStream.writeBytes(cmd);
//提交命令
dataOutputStream.flush();
//关闭流操作
dataOutputStream.close();
outputStream.close();
}
catch(Throwable t)
{
t.printStackTrace();
}
}

android系统执行shell脚本,需要首先确认用户具有修改shell的权限,使用 process来执行指令,如下代码:

public void execShell(String cmd){
     try{  
            //权限设置
            Process p = Runtime.getRuntime().exec("su");  //开始执行shell脚本
            //获取输出流
            OutputStream outputStream = p.getOutputStream();
            DataOutputStream dataOutputStream=new DataOutputStream(outputStream);
            //将命令写入
            dataOutputStream.writeBytes(cmd);
            //提交命令
            dataOutputStream.flush();
            //关闭流操作
            dataOutputStream.close();
            outputStream.close();
       }  
       catch(Throwable t)  
        {  
             t.printStackTrace();  
            } 
    }


如果LZ要是Android开发者就好办了。
下载Android sdk。
1.将sdk下的adb(mac 上是在platform-tools文件夹下,windows可能在tools目录下,sdk版本不一样,adb文件所在的目录有时不相同)配置到环境变量中
2.将手机连接到电脑上
3.adb shell
然后LZ就可以在电脑的控制台窗口玩shel了,要不不嫌麻烦的话,手机上也有shell模拟器app。的l


【Android休眠】之Android休眠机制
为什么要休眠呢?一言以蔽之:省电。休眠分主动休眠和被动休眠。主动休眠:比如我电脑不用了,就通过设置让系统进入休眠模式;被动休眠:系统检测到自己闲的慌,为了节约故,自己就休眠去了。休眠是内核的核心工作,而Android是基于Linux内核的,所以Android休眠和内核有着千丝万缕的联系;由于Android的特殊...

iOS和Android的推送机制有何不同?
安卓和iOS的对比:谁更胜一筹?在移动操作系统的世界里,iOS与Android犹如两大截然不同的体系,一个封闭,一个开放。对于开发者来说,它们各有千秋。让我们深入探讨它们的差异:开发环境对比:首先,iOS的开发环境以简洁著称,只需下载官方的Xcode,安装即刻开始,相比之下,Android则需要繁琐的步骤:安装...

Android启动过程深入解析
假如Android应用应该尽可能快地启动,但如果Android系统为每一个应用启动不同的Dalvik虚拟机实例,就会消耗大量的内存以及时间。因此,为了克服这个问题,Android系统创造了”Zygote”。Zygote让Dalvik虚拟机共享代码、低内存占用以及最小的启动时间成为可能。Zygote是一个虚拟器进程,正如我们在前一个步骤所说的...

诺基亚的Android项目对微软有何益处?
结论:微软应当支持诺基亚的Android项目,以利用诺基亚在低端市场的传统优势和微软自身的云服务潜力,打破智能手机市场的现有格局,尤其是在Android在智能手机市场占据主导的背景下,这一举措对于微软的网络服务发展至关重要。(微软与诺基亚Android合作可能带来突破)随着诺基亚与微软合同的即将到期,Android项目成为...

新手求助,Android Studio安装
好了这一篇就写到这吧,吐槽一下,CSDN的博客编辑和图片上传编辑实在是太难用了,特别是图片上传,各种不爽,可以学习下邮箱上传后调调尺寸吧,界面截个图传上去占大半个屏幕,这么多年了,该升级下了,让写博人情何以堪啊。另外,这两天在网上看到很多人大肆抱怨Android Studio各种不爽,其实大家也...

手机操作系统的Android
相信Flyme OS 1.0将成为Android4.0时代标志性的深度定制人性化操作系统,更多精彩让我们一同期待魅族未来公布的新系统细节。10、百度云百度云智能终端平台是深度整合了百度核心技术与服务的智能终端软件平台。支持厂商:戴尔,天语,海尔 11、中国移动OMSOpen Mobile System是中国移动通讯集团和Google合作联合开发的一款基于Linux...

Android7.1的界面有何特点
Android7.1的界面有何特点?Android7.1的新特性:更强大的界面设计Android是目前全球最受欢迎的移动操作系统之一,自2008年首次推出以来一直在不断发展。每一次更新都会带来更多的新特性和改进。近来,Google发布了最新的Android7.1版本,它包括许多新功能和改进,其中一项重要的改进就是更强大的界面设计。A...

Android Touch事件分发处理机制详解
至此,Touch事件的分发与处理流程算是走通了,个人看完整个源码之后有种豁然开朗的感觉,能很清晰的分析向“为什么事件有时候传到某个View有时候却不传?”、“有时候只传前面几个事件后面却不传了?”等问题,也希望本文的分析能让你更清晰地感知Android中Touch事件的传递流程,如果发现文中有何错误,...

怎么关闭安卓程序自动运行怎么关闭安卓程序
安卓手机如何设置默认软件以及清除默认软件?设置默认软件 1、首先说下我们如何设置桌面,在桌面按一次HOME键,就可以弹出一个客户选择的框框,然后有两个选项,一个是后续操作一直默认,一个是只默认这一次。2、而默认视频的方式一样,只要求在你要播放的文件单击一次,然后会弹出一个选择框,让你选择...

三星Galaxy A51何时能获得Android 11和OneUI 3.0的完整更新?
一直以来,等待操作系统更新曾是三星用户的一块心病。然而,如今的三星以其高效的速度,成为了将智能手机升级至Android 11的佼佼者。这款2020年热销的中端明星Galaxy A51也紧随其后,迎来了One UI 3.0的Android 11更新,进一步巩固了其在市场上的地位。三星的最新努力已经让Galaxy A51的用户开始享受到...

金湖县19227317722: 荣耀6怎么把系统换为原生andriod,华为荣耀6/荣耀6 plus 安卓论坛 -
用丽归芍: 荣耀6手机更换系统为原生安卓需要通过电脑刷入移植的原生安卓包.1、首先,在网上rom资源网站找到与荣耀6适配的原生andriod包.2、电脑下载安装刷机软件,.3、将手机连接电脑.4、用电脑将刷机包刷入荣耀6即可.5、注意刷机前做好重要资料的备份.

金湖县19227317722: 安卓一键变苹果系统 -
用丽归芍: 1、首先在安卓手机中下载安装安卓变苹果控制中心APP,安装之后打开,首次打开会跳转到「悬浮窗管理」设置页面,这里首先需要找到刚安装的「控制中心」APP,然后将其开关「开启」,如下图所示. 2、接下来需要进入「安卓变苹果...

金湖县19227317722: 我想把我的 手机 华为Y210S,现在是Android2.3.6级的,我想通过刷机把它刷成Andr -
用丽归芍: Y210S太低端了,至少也得是G开头的才带4.X,3.X是平板用的也不可能

金湖县19227317722: androidsdk怎么安装 -
用丽归芍: Android SDK的安装与环境变量配置步骤:一、配置Andriod环境变量1、下载Android SDK,点击安装,直接默认路径即可2、默认路径安装后,安装完成,开始配置环境变量.3、打开计算机属性——高级系统设置——环境变量(如上文)4、...

金湖县19227317722: 如何让Android系统或Android应用执行shell脚本 -
用丽归芍: 一、Android应用启动服务执行脚本1 如何写服务和脚本 在android源码根目录下有/device/tegatech/tegav2/init.rc文件相信大家对这个文件都不陌生(如果不明白就仔细研读下android启动流程).如果在该脚本文件中添加诸如以下服务:service ...

金湖县19227317722: 如何让安卓系统在安装软件后让其图标不在启动器上显示,就像flash player或Andriod键盘那样 -
用丽归芍: 或者你可以把图标删除,应用程序还在 还有就是一般隐私保护软件都有加密/隐藏应用的,只是卸载隐私保护软件时,注意要先把加密/隐藏的文件或应用取消,再卸载

金湖县19227317722: 怎么下载安卓系统? 跪求!!!!!!!!!!!! -
用丽归芍: 你的是安卓手机吗?系统是不能下载的!如果你的是安卓手机,不小心删除了手机自带的andriod系统,可以通过刷机来刷回andriod.如果你的手机不是安卓的,那是不能用andrio系统的.不过,可以用电脑体验andriod!

金湖县19227317722: 怎么利用android4.4的源码进行andriod系统移植 -
用丽归芍: 2.4搭建Android SDK开发环境上一节我们讲解了如何下载、编译Android系统及Linux内核,接下来,讲解如何搭建Android SDK开发环境,包括Eclipse下载安装、ADT插件安装、Fr...

金湖县19227317722: 高手请进!关于把WM手机刷成Andriod系统
用丽归芍: 回答楼主,不是刷成安卓,而是用Linux的模拟器加载安卓的ROM,就可以运行了,不同的手机,需要不同的配置文件,如分配运行内存,这都需要高手去试验,不过ROM和模拟器用的是一样的,目前我的I8000运行后,电话方面是不能用,还有WIFI,蓝牙等不能用,是驱动的原因,相信不久高手就会移植过去

金湖县19227317722: 如何才能把安卓手机修改成windows xp 系统 -
用丽归芍: 首先,需要下载安装xp镜像,但是一般来说普通手机很难达到要求,根本不可行.另一解决方案是下载并安卓远程桌面连接应用,远程连接一台xp电脑,实现的效果就如同是本机是xp一样,有异曲同工之妙.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网