下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】创建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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- GB/T 11026.3-2025电气绝缘材料耐热性第3部分:计算耐热特征参数的规程
- 2026届辽源市重点中学高二化学第一学期期末达标检测试题含解析
- 2025年山西省朔州市怀仁一中生物高一第一学期期末学业质量监测模拟试题含解析
- 广东省广州市荔湾区2025-2026学年物理高二上期末达标测试试题含解析
- 河北体育学院《医学免疫学与病原生物学理论》2024-2025学年第一学期期末试卷
- 2025年云南省昭通市大关县二中高二生物第一学期期末联考模拟试题含解析
- 江苏省新沂市第一学校2025年高二数学第一学期期末联考模拟试题含解析
- 肾衰竭患者透析护理指南
- 风湿性关节炎疼痛管理方案
- 口腔溃疡自我护理指南
- 七年级国际学校数学试卷
- 立体库基本知识培训课件小结
- 学校食堂从业人员培训考试试题及答案
- 基于Uni-app的智慧医疗惠民小程序的设计与实现
- 2025年持续膀胱冲洗护理操作常见并发症的预防与处理规范
- 党建品牌创新活动创新路径与实践探索
- 2025年特教专业的面试题目及答案
- 2025年贵州综合评标专家库评标专家考试经典试题及答案一
- 人教B版高中数学必修二拓展提升:指数、对数型复合函数(学生版+解析)
- TIA病情观察及护理
- 学堂在线 工程伦理2.0 章节测试答案
评论
0/150
提交评论