我的编程空间,编程开发者的网络收藏夹
学习永远不晚

安卓系统开机运行shell脚本

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

安卓系统开机运行shell脚本

在安卓系统上很多业务需求是通过shell脚本实现的,开机自启动一般做法是创建安卓service服务,然后通过该服务调用执行shell脚本。详细步骤:

1、编辑shell脚本

如下shell脚本功能为:循环查询系统下是否有厂商ID为0x1A86的USB转串口设备匹配到了CDC-ACM驱动上,若是则解绑USB设备和CDC-ACM驱动的绑定,并重新绑定到厂商的CH343SER串口驱动上。

#! /bin/shusbpath=""usbnode=""usbdevpath='/sys/bus/usb/devices/'usbdriverpath='/sys/bus/usb/drivers/'while [ true ]dofor file in /sys/bus/usb/drivers/cdc_acm}usbpath=${usbpath%:*}idVendor=$usbdevpath$usbpath'/idVendor'if [ ! -f "$idVendor" ]thencontinuefiif [[ $(cat $idVendor) == "1a86" ]]thenusbnode=${file##*/}echo $usbnode > /sys/bus/usb/drivers/cdc_acm/unbindecho $usbnode > /sys/bus/usb/drivers/usb_ch343/bindfifidonesleep 1done

2、修改device.mk文件

在该文件中增加,实现将脚本文件编译时拷贝到系统。shell脚本文件的系统路径:/vendor/bin/ch343check.sh

PRODUCT_COPY_FILES += \    $(LOCAL_PATH)/ch343check.sh:$(TARGET_COPY_OUT_VENDOR)/bin/ch343check.sh \

3、修改init.xxx.rc文件

在系统启动rc文件中新增service服务,如下所示:

#Add shell scripts for ch343 serviceservice ch343check /vendor/bin/sh /vendor/bin/ch343check.sh    class main    user root    group root

service声明格式:service [服务名称] [执行的shell命令]

注:部分平台上必须使用"sh + shell"脚本名称的方式声明,否则可能不工作。"class main" 声明方式可实现开机自动执行,并不需要在 on property:sys.boot_completed=1 后面添加 "start ch343check"

4、查看并设置selinux权限

查看运行此服务所需要的selinux权限,可通过“start 服务名”,查看logcat确定权限。

adb shell "dmesg | grep avc" > avc_log.txt

如下所示:

[ 232.117640 ] type=1400 audit(1682072440.187:512):avc: denied { write } for comm="sh" name="unbind" dev="sysfs" ino=38155 scontext=u:r:vendor_qti_init_shell:s0 tcontext=u:object_r:sysfs:s0 tclass=file permissive=0

其中 permissive=0 说明缺乏某项权限。

根据如上权限问题,修改qcom下selinux的sepolicy目录下的,file_contents和init_shell.te文件

file_contents文件新增:/(vendor|system/vendor)/bin/ch343check\.sh u:object_r:vendor_qti_init_shell_exec:s0

根据te文件规则 allow scontext tcontext : tclass permission 在te文件后面增加对应的权限。

init_shell.te文件新增:allow vendor_qti_init_shell sysfs:file { write }; 

注:可以选择创建新的te文件(系统常规会遍历文件夹下的所有te文件),也可以在原有的te文件中新增内容。

编译到系统后,查看文件或进程是否有此新增权限,可使用 “ls -Z filepath”“ps -ef -Z” 命令。

/vendor/bin/ch343check.sh u:object_r:vendor_qti_init_shell_exec:s0
# ps -ef -Z | grep ch343u:r:vendor_qti_init_shell:s0   root  1250 1 0 14:02:55 ? 00:00:00 sh /vendor/bin/ch343check.sh

5、解决neverallow冲突

当修改te文件后进行系统编译时,可能会遇到安卓系统编译问题。原因是新增的allow规则与全局的neverallow有冲突,举例:

[2023-04-22T11:40:58.529Z] neverallow check failed at out/soong/.intermediates/system/sepolicy/recovery_sepolicy.cil/android_common/recovery_sepolicy.cil:11224 from system/sepolicy/public/domain.te:507[2023-04-22T11:40:58.529Z]   (neverallow domain vendor_file_type (file (write create setattr relabelfrom append unlink link rename)))[2023-04-22T11:40:58.529Z]     [2023-04-22T11:40:58.529Z]     allow at out/soong/.intermediates/system/sepolicy/recovery_sepolicy.cil/android_common/recovery_sepolicy.cil:40813[2023-04-22T11:40:58.529Z]       (allow shell vendor_file (file (read write getattr execute open execute_no_trans)))[2023-04-22T11:40:58.529Z][2023-04-22T11:40:58.529Z] Failed to generate binary[2023-04-22T11:40:58.529Z] Failed to build policydb

此问题,直接修改报错文件 domain.te,然后在出错行号的 neverallow 定义中使用 "-xxx" 来排除对此权限的not allow。

修改前:neverallow { domain } vendor_file_type (file (write create setattr relabelfrom append unlink link rename))修改后:neverallow { domain -shell } vendor_file_type (file (write create setattr relabelfrom append unlink link rename))

除此之外,domain.te 会与系统的其他 apixx/domain.te 文件进行比对,此内容必须完全匹配。建议直接复制替换即可。

至此,安卓系统通过服务实现开机自动运行shell脚本完成。

来源地址:https://blog.csdn.net/WCH_TechGroup/article/details/130337224

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

安卓系统开机运行shell脚本

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

开机自动运行python脚本

1、新建rc.localtouch /etc/rc.d/rc.localvim /etc/rc.d/rc.local#!/bin/bash#下面是需要执行的脚本2、赋予可执行权限chmod +x /etc/rc.d/rc.local3、编辑
2023-01-31

Linux系统怎么执行Shell脚本

小编给大家分享一下Linux系统怎么执行Shell脚本,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1)bash script-name或者sh script-n
2023-06-28

Linux系统设置开机自动运行脚本的方法实例

前言 大家好,我是良许。 在工作中,我们经常有个需求,那就是在系统启动之后,自动启动某个脚本或服务。在 Windows 下,我们有很多方法可以设置开机启动,但在 linux 系统下我们需要如何操作呢? Linux 下同样可以设置开机启动,但
2022-06-04

Shell脚本定时备份清除运行系统日志的代码

一、写备份并清除老日志Shell脚本: #!/bin/sh#backup eoslog#author rhao#date 2008-12-27 #定义环境变量EOS_HOME=/home/eosSAS_HOME=/home/eos/SAS
2022-06-04

云服务器能运行exe吗安卓系统

在使用云服务器的过程中,我们需要注意以下几点:选择安全可靠的云服务提供商选择安全可靠的云服务提供商是保障数据安全的关键。可以选择一些大型的云服务提供商,如AWS、Azure、GoogleCloud等,这些云服务提供商都有完善的安全机制和保障措施,可以保障数据的安全。配置防病毒软件和防火墙在使用云服务器的过程中,我们需要
2023-10-27

【Linux】Linux系统后台运行脚本方法

文章目录 前言正文启动脚本查看正在运行的脚本结束脚本运行 前言 我们使用Linux搭建服务器之后,经常需要在服务器上运行一些脚本,例如定期检查网络连通性并保存出错日志等。在写好批处理文件(.sh)文件之后,如果是Ubunt
2023-08-22

Linux系统crontab定时运行shell脚本失败的问题及解决

目录1.最近开始学习linux系统使用2.脚本倒是很简单第一种第二种最后我找到两解决办法 总结1.最近开始学习Linux系统使用 经过一段时间学习终于学到了shell脚本,因为学的东西比较零散,突发奇想我学过了crontab定时任务,今天也
2023-04-07

如何使用Shell脚本定时备份清除运行系统日志

小编给大家分享一下如何使用Shell脚本定时备份清除运行系统日志,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、写备份并清除老日志Shell脚本:代码如下:#!
2023-06-09

linux系统中如何安全使用shell脚本

本篇文章为大家展示了linux系统中如何安全使用shell脚本,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。使用方法将其复制,保存为一个shell文件,比如security.sh.将其上传到linu
2023-06-13

Linux中怎么设置开机自动运行脚本

这期内容当中小编将会给大家带来有关Linux中怎么设置开机自动运行脚本,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。方法一:修改 /etc/rc.d/rc.local 文件/etc/rc.d/rc.loc
2023-06-15

Shell脚本实现在Linux系统中自动安装JDK

A:本脚本运行的机器,Linux B:待安装JDK的机器, Linux 首先在脚本运行的机器A上确定可以ssh无密码登录到待安装jdk的机器B上,然后就可以在A上运行本脚本:$ ./install-jdk.sh B的IPor:$ ./ins
2022-06-04

如何实现CentOS开机自动运行自己的脚本

这篇文章将为大家详细讲解有关如何实现CentOS开机自动运行自己的脚本,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。操作系统:CentOS-5.2目标:开机自动挂载局域网中windows的共享目录一、ro
2023-06-10

编程热搜

  • Android:VolumeShaper
    VolumeShaper(支持版本改一下,minsdkversion:26,android8.0(api26)进一步学习对声音的编辑,可以让音频的声音有变化的播放 VolumeShaper.Configuration的三个参数 durati
    Android:VolumeShaper
  • Android崩溃异常捕获方法
    开发中最让人头疼的是应用突然爆炸,然后跳回到桌面。而且我们常常不知道这种状况会何时出现,在应用调试阶段还好,还可以通过调试工具的日志查看错误出现在哪里。但平时使用的时候给你闹崩溃,那你就欲哭无泪了。 那么今天主要讲一下如何去捕捉系统出现的U
    Android崩溃异常捕获方法
  • android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
    系统的设置–>电池–>使用情况中,统计的能耗的使用情况也是以power_profile.xml的value作为基础参数的1、我的手机中power_profile.xml的内容: HTC t328w代码如下:
    android开发教程之获取power_profile.xml文件的方法(android运行时能耗值)
  • Android SQLite数据库基本操作方法
    程序的最主要的功能在于对数据进行操作,通过对数据进行操作来实现某个功能。而数据库就是很重要的一个方面的,Android中内置了小巧轻便,功能却很强的一个数据库–SQLite数据库。那么就来看一下在Android程序中怎么去操作SQLite数
    Android SQLite数据库基本操作方法
  • ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
    工作的时候为了方便直接打开编辑文件,一些常用的软件或者文件我们会放在桌面,但是在ubuntu20.04下直接直接拖拽文件到桌面根本没有效果,在进入桌面后发现软件列表中的软件只能收藏到面板,无法复制到桌面使用,不知道为什么会这样,似乎并不是很
    ubuntu21.04怎么创建桌面快捷图标?ubuntu软件放到桌面的技巧
  • android获取当前手机号示例程序
    代码如下: public String getLocalNumber() { TelephonyManager tManager =
    android获取当前手机号示例程序
  • Android音视频开发(三)TextureView
    简介 TextureView与SurfaceView类似,可用于显示视频或OpenGL场景。 与SurfaceView的区别 SurfaceView不能使用变换和缩放等操作,不能叠加(Overlay)两个SurfaceView。 Textu
    Android音视频开发(三)TextureView
  • android获取屏幕高度和宽度的实现方法
    本文实例讲述了android获取屏幕高度和宽度的实现方法。分享给大家供大家参考。具体分析如下: 我们需要获取Android手机或Pad的屏幕的物理尺寸,以便于界面的设计或是其他功能的实现。下面就介绍讲一讲如何获取屏幕的物理尺寸 下面的代码即
    android获取屏幕高度和宽度的实现方法
  • Android自定义popupwindow实例代码
    先来看看效果图:一、布局
  • Android第一次实验
    一、实验原理 1.1实验目标 编程实现用户名与密码的存储与调用。 1.2实验要求 设计用户登录界面、登录成功界面、用户注册界面,用户注册时,将其用户名、密码保存到SharedPreference中,登录时输入用户名、密码,读取SharedP
    Android第一次实验

目录