Android 编写开启自启动的脚本服务

news/2024/11/20 19:41:18/

 前言

   因为公司有一款手机在升级之后用户找不到内部sdcard 中的数据,分析了主要原因是因为升级前后内部sdcard 的链接的路径改变了。之前sdcard的数据在/sdcard/emulated/ 目录下,升级时候放在了/sdcard/emulated/0/ 下面。一个解决方案就是在手机启动的时候开启一个脚本服务检测一下当前的目录是否是正确的,如果不对就进行目录得调整。主要的操作就是mv 操作,效率很高。


目录

1. 编写Shell脚本

2. fs_config.c 提交文件权限

3. 增加selinux te 文件,增加Shell脚本的一些权限

4. 添加新增文件上下文

5. 增加mk 文件实现编译拷贝

6. 在init.rc 中加入开机启动的Service


正文

1. 编写Shell 脚本

adjust_sdcard.sh

#!/system/bin/sh
i=1
num=0
while :
do
log -t ota-sdcard "try ..."$i
need_adjust=`ls /storage/emulated/ -l |grep "^d"|wc -l`
log -t ota-sdcard "need adjust ="$need_adjust
if [ "$need_adjust" == "2" ]
then
log -t ota-sdcard "adjust inner sdcard success ."
break
else
log -t ota-sdcard "try adjust inner adcard dir..."
for file in /storage/emulated/*
doif test -f $filethenecho "move $file -> /storage/emulated/0/${file##*/}"log -t ota-sdcard "move $file -> /storage/emulated/0/${file##*/}"let num++mv $file /storage/emulated/0/${file##*/}fiif test -d $file && [ ${file##*/} != "0" ] && [ ${file##*/} != "obb" ]thenecho "move $file -> /storage/emulated/0/${file##*/}"log -t ota-sdcard "move $file -> /storage/emulated/0/${file##*/}"let num++mv $file /storage/emulated/0/${file##*/}fi
done
log -t ota-sdcard "move num = $num"
fi
sleep 2
i=$(($i+1))
done

具体的功能就是判断一下目录结构对不对,如果不对就会调用mv 进行目录的调整。上面的脚本只是演示了主要的功能,用作调试用的。用兴趣可以看一下。


2. fs_config.c 提交文件权限

这个文件就是设置文件在系统中的权限

fs_path_config android_files 中增加
{ 00750, AID_ROOT, AID_ROOT, 0, "system/bin/adjust_sdcard.sh" },

3. 增加selinux te 文件,增加Shell脚本的一些权限
我们知道Android 4.4 之后引入了selinux的机制,所以我们编写的Shell的脚本的中很多命令代码都需要给予相应的selinux 权限。
#ota_sdcard.te
type ota_sdcard, domain;
type ota_sdcard_exec, exec_type, file_type;

init_daemon_domain(ota_sdcard)
allow ota_sdcard system_file:file execute_no_trans;
allow ota_sdcard shell_exec:file rx_file_perms;
allow ota_sdcard storage_file:dir search;
allow ota_sdcard fuse:dir {open read search getattr write remove_name rename add_name reparent};
allow ota_sdcard fuse:file {open read getattr write rename create};

4. 增加Shell 脚本文件的上下文
/system/bin/adjust_sdcard.sh u:object_r:ota_sdcard_exec:s0

5. 增加mk 文件实现编译拷贝
PRODUCT_COPY_FILES += \
device/qcom/msm8916/adjust_sdcard.sh:/system/bin/adjust_sdcard.sh

6. 在init.rc 中加入开机启动的Service
service ota-sdcard /system/bin/adjust_sdcard.sh
class main
oneshot
开机作为main 自启动。

上面的6个步骤是实现整个机制的核心步骤,细节并没有过多的讲述,后面增加每个步骤具体涉及到的知识点。






http://www.ppmy.cn/news/650941.html

相关文章

java是什么?好学吗?

什么是程序员以及编程语言 java是一种编程语言,是软件开发的一种,而软件开发人员属于程序员的一种。 要了解java是什么,最好是先对程序员有一个基本了解,有兴趣的朋友可以先看一看我的这篇关于程序员的文章: 程序员是…

网页上怎么查询服务器地址,怎么查看一个网页的服务器地址

怎么查看一个网页的服务器地址 内容精选 换一换 本章节介绍如何通过控制台查看云手机实例的详细信息。登录管理控制台。在管理控制台左上角,选择待查看云手机所在的区域。在服务列表页,选择“计算 > 云手机 CPH”。进入云手机页面。进入云手机页面。单击左侧导航栏的“实例…

es文件浏览器开启ftp服务器,es文件浏览器访问ftp服务器

es文件浏览器访问ftp服务器 内容精选 换一换 obsftp工具于2021年2月9日正式下线,下线后OBS不再对此工具提供维护和客户支持服务,给您带来不便敬请谅解。文件传输协议(File Transfer Protocol,FTP)当前广泛应用于个人和企业场景,而随着使用时间越来越长,用户越来越多,本地…

阿里云国际版短信验证码及服务教程

阿里云国际版服务器开通之后,为了更多地运营网站,同时做到快速的信息通知及推广,阿里云短信服务就是很有必要的一种选择方式,调用API或用群发助手,即可发送验证码、通知类和营销类短信;国内验证短信秒级触达…

adb重启是什么意思

adb 的全称为 Android Debug Bridge,起到调试桥的作用。通过 adb 可以在 Eclipse 中方便通过 DDMS 来调试 Android 程序,就是 debug 工具。adb 的工作方式比较特殊,采用监听 Socket TCP 5554 等端口的方式让 IDE 和 Qemu 通讯,默认…

什么是服务器的高并发

在网上购物,秒抢某个商品,比如说小米手机,这对我们来说都不陌生。这些看似很简单的东西从技术的角度来说对于Web系统是一个巨大的考验,一个Web系统,在很短时间内收到很多请求时,系统的优化和稳定至关重要&a…

什么是 PaaS?“平台即服务“ 简介

“平台即服务” (PaaS) 是指一组基于云的服务,可帮助企业用户和开发人员以本地部署解决方案无法企及的速度创建应用程序。由于 PaaS 是基于云的服务,所以没有安装和维护服务器、修补、升级、身份验证等烦恼。用户只需考虑如何创建最佳用户体验。PaaS 还会…

这是你所了解的FaaS 么?——无服务计算的10个思考

如今,云计算特别是基础设施即服务(Infrastructure-as-a-Service,IaaS)已经成为广泛采用的系统架构,并且可以根据需要提供虚拟机。企业越来越多地采用云计算的一个主要因素是其现收现付模式,客户只需为从云计算提供商那里租用的资源…