android 层级分析
这个图中 kernel 和 native 层的通信是 syscall,这个大家都很熟悉,就是系统调用,毕竟 c++ 调用 c 语言还是很简单的。
而 framework 层和 native 层通信就比较复杂了,java 如何调用 c++ 语言,这里会有一个 jni 机制,jni 有特定的语法,类似于 c 语言但又不是 c 语言,他可以实现 java 调用 c++的函数,这个过程需要 android runtime(art) 安卓虚拟机的配合。
在 native 层中,有很多 c++ 写的系统服务,供上层使用,比如最重要的servicemanager,管理所有其他服务的服务。
案例分析
手机 app 想要控制喇叭、led 等硬件,要从 app 传递到 kernel,操作硬件,这个流程要比 linux 的应用程序复杂得多。并且方式不止一种,举例:
1、app 通过直接读写 kernel 节点,向其写入数据,这就类似于在 linux 命令行直接 echo,这是最简单的方式。因为 java 本身也有文件读写函数,有按字节读写和字符串读写两种方式。
2、app 的 java 语言调用 jni 文件,jni 调用 c 语言,在 c 函数中去操作节点。
3、也可以用 c++ 写一个 native 服务,app 通过 binder 通信访问这个服务,在这个服务中操作节点。当然 socket 通信也可以。
android 权限问题
当然,以上所有的操作都需要权限,安卓系统的权限限制的比较严格,防止黑客破解。
如果你有 root 权限,那么你可以在安卓系统命令行中输入 setenforce 0 来关闭android 系统的 selinux 检查机制,那基本上你所有操作都可以被允许。
在 linux 系统中,安全机制是:我是 root,我派出去的程序访问任何东西也应该是 root 权限,没有人可以阻止我。
在 andorid 系统中,安全机制是:不管你是谁,做任何事情都要提前申请,否则会被 selinux 检查,没有提前申请的行为都会被拒绝,看 log 会发现很多 avc deny。
举个形象一点的例子:一个公司老板,派他的儿子去自己的公司上班,按理来说是应该类似于 root 权限,谁能挡我?实际上呢,到公司上班可以,因为老板提前说了,但是去卫生间要申请权限,用电脑要申请权限,用打印机要申请权限,除了过来上班,其余任何没有提前说明的行为都会被拒绝。
这就是 andorid 系统严格的安全机制,防止了黑客破解 root 权限以后乱搞你的手机,比如:内置一个程序,定期访问你的 xxx 文件,然后通过网络发出去。
什么是MTP
低压输入交错并联双管正激变换器的研究
tn面板的优缺点_tn面板和ips面板哪个好
数字化+行业的收获时分,人间烟火即是数字中国
如何让苹果手机投屏到电脑上
Android系统层级分析与权限问题
台积电规划2023 年正式装机试产 5nm 制程
佐思参加CICV2019 发布智能网联汽车数据库电子版
什么是幂等性?关于接口幂等性的解决方案
工业微控制器的开源优势及开源控制器的应用
OPPO R11和R9s拍照哪个好?一文解析到底升级了多少?
服务器数据恢复-IBM服务器reiserfs文件系统数据恢复案例
51ROBOT与现代重工机器人合作,助力中国制造产业发展
大数据怎么玩?数据存储这个关键技术要学好
数字电源中的硬件设计
基于LTC6802的电池组监控平台的电路设计
旧房安装智能家居 首选无线传输方式
浅谈石墨烯行业展望, 竞争优势和劣势
全球存储芯片市场遇冷,三星存储芯片收入暴跌20%
NMOS场效应管/PMOS场效应管防反保护解析