下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】创建Android守护进程实例(底层服务)
前言Android底层服务,即运行在linux下的进程,是Android系统运行的基础,完成Android或者说计算机最基本的功能。比如连接服务(包括WIFI,BT等等);比如Android的adb功能;比如存储监控等等。没有这些底层服务,上层也就没有了对应的功能。Android底层服务往往是常驻内存,时刻运行完成任务。底层服务进程,往往具有更多的权限,可能和驱动通信,可能和linux内核通信,可能需要操作系统核心运行文件以及节点等等。所以,底层服务,可以帮你完成更多计算机基本功能。本文所使用的AOSP是基于Android8.1。阅读文本需要对Android的架构、编译系统、AOSP工程和SeAndroid有基本认识。创建守护进程创建目录编写代码创建目录我们在Android系统通用守护进程目录下创建我们的守护进程,当然你也可以在其它目录下放置你的守护进程。
/system/core/
/system/core/在上面的目录下,创建守护进程的文件夹nativeservice,那么,我们的守护进程就存在如下目录,下文中称简称目录代表如下目录。
/system/core/nativeservice/
/system/core/nativeservice/编写代码在目录中创建主代码文件native_main.cpp。另外,我们需要编译,那么就需要mk文件,创建一个Android.mk文件。这时,目录架构就是如下这个样子编写Android.mk我在代码中尽可能的注释清楚重要语句的作用,读者如果对AndroidAOSP编译不了解的,可以查阅更多mk语法的资料学习。编写native_main.cpp在Linux中,一个开机启动的服务,执行完后会自动退出,而我们是守护进程,那么就需要一直运行。让程序一直运行有很多种方法。在native_main.cpp中贴出了三种方式,它们分别是epoll,有名管道(FIFO)和循环。epoll的方式是Android系统比较常见的方式,系统的电池状态变化、USB接口状态变化等守护进程便是通过epoll的方式,实时鉴定并读取新状态。有名管道,在IPC通信中比较简单、便捷,适合轻量级任务。循环,这个是最老套的方式。三种方式在native_main.cpp都贴出来了,本文侧重使用有名管道(FIFO)的方式,鉴于篇幅过长,其它方式就一笔带过了,如果读者对epoll等较为兴趣的,可以自行查阅更多资料学习。下面是native_main.cpp的代码,请认真看注释哦。
推进编译系统编写好Android.mk和native_main.cpp后,可以通过单边命令“mmmsystem/core/nativeservice”编译我们的守护进程了。但是此时用make编译整个AOSP时,却不会编译我们的nativeservice。因此,需要告诉编译系统,编译工程时,同时编译nativeservice。修改如下在/build/make/target/product/core.mk文件添加nativeservice,当然不限制添加在这个文件,很多厂商的工程,也会增加自己的PRODUCT_PACKAGES配置mk文件。配置开机启动至此,编译整个工程,守护进程也可以被编译了,这个时候,刷到手机是否就可以运行了呢?不会的,我们还需要让守护进程在手机开机的时候运行起来,且运行中进程死掉的话,也需要重新启动守护进程。方法如下在system/core/rootdir/init.rc文件中添加如下代码读者可以查看AOSP中system/core/init/README.md文件了解init.rc的语法和配置方法。对于classcore等不同类别的区别,读者可以阅读《Android加密之全盘加密》相关的阐述。配置SeAndroid至此,编译整个工程,守护进程也可以被编译了,也配置了开机自启动。这个时候,刷到手机是否就可以运行守护进程了呢?不可以,我们知道Android继用了SeLinux安全机制,同时发展出SeAndroid机制,所有文件和进程都需要配置SeAndroid才能有权限。因此,如果没有给守护进程以及守护进程需要操作的目录和文件赋予权限,都会被SeAndroid过滤或禁止。由于QCOM和Mediatek的不同,在相关文件的放置路径会不同,但是方法都是一样的,不同的平台,找到对应的路径下的文件就可以了。本文以MTK平台的为例。1、在device/mediatek/sepolicy/basic/non_plat/file_contexts中添加如下代码
/system/bin/nativeserviceu:object_r:nativeservice_exec:s0
/system/bin/nativeserviceu:object_r:nativeservice_exec:s02、在device/mediatek/sepolicy/basic/non_plat/中添加nativeservice.te文件,文件内容如下刷机验证至此,需要编译整个AOSP工程,当然,如果有编译过,只需要增量编译即可,很快就可以编译完成。1、刷机后在手机的/system/bin/nativeservie目录下能看到守护进程;2、看一下SeAndroid的SContext3、看一下FIFO管道文件4、prwx前面的p代表是一个管道文件5、管道文件SeAndroid的tcontext6、守护进程启动,启动后打开管道,等待管道数据写入。由于守护进程比抓log的工具启动还早,因此,开机时前面的log无法抓取,如下log是手动kill掉守护进程打印的lo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 湖北省宜昌市协作体2024-2025学年高三上学期11月期中考试生物试题含答案
- 2024年出售农民自建房协议书模板
- 2024年代理父母养老协议书模板
- 2024年承接手工厂外发合同范本
- 企业如何开展好工会活动
- 与水有关的主题活动
- 上消化道出血的护理
- 【数学】抛物线的简单几何性质第1课时课件+2024-2025学年高二上人教A版(2019)选择性必修第一册
- 2024贵州肉类供货合同范文
- 2024年矫味剂项目综合评估报告
- 民族团结主题班会教学课件
- 国开成本会计第14章综合练习试题及答案
- 幼儿园教育活动设计与指导(第二版)教案第二章第二节幼儿园语言教育活动设计二
- 外观检查记录表
- GB∕T 13171.1-2022 洗衣粉 第1部分:技术要求
- 气温的变化与分布 完整版课件
- 现在完成时的用法 完整版课件
- 中小学古诗词首
- DB11T 1411-2017 节能监测服务平台建设规范
- 外科学教案-心脏疾病
- 白内障手术流程
评论
0/150
提交评论