1.Zygote:Android应用的孵化器,一切Android程序由此进程fork而来。
2.Binder:Android的进程间通信机制,它是Android平台最核心的功能组件。
3.Package Manager Service:应用安装包管理服务,不仅负责包的安装和卸载,更重要的是负责Android应用信息的查询和控制,例如Android权限管理。
4.Activity Manager Service:管理Android框架层的进程,也包含了Android应用四大组件的逻辑实现。
5.Dalvik,art虚拟机:android 系统的虚拟机,google自己编写的一个虚拟机.可执行文件是dex文件。
1.进程沙箱隔离机制
Android应用程序在安装时被赋予独特的用户标识(UID),并永久保持;应用程序及其运行的Dalvik虚拟机运行于独立的Linux进程空间,与UID不同的应用程序完全隔离。如下图:
在特殊情况下,进程间还可以存在相互信任关系。如源自同一开发者或同一开发机构的应用程序,通过Android提供的共享UID(Shared UserId)机制,使得具备信任关系的应用程序可以运行在同一进程空间。
2.应用程序签名机制
签名的过程:
• 生成私有、公共密钥和公共密钥证书
• 对应用进行签名
• 优化应用程序
签名的作用:
• 识别代码的作者。
• 检测应用程序是否发生了改变。
• 在应用程序之间建立信任,以便于应用程序可以安全地共享代码和数据。
在安装应用程序APK时,系统安装程序首先检查APK是否被签名,有签名才能安装。当应用程序升级时,需要检查新版应用的数字签名与已安装的应用程序的签名是否相同,否则,会被当做一个新的应用程序。Android开发者有可能把安装包命名为相同的名字,通过不同的签名可以把他们区分开来,也保证签名不同的包不被替换,同时防止恶意软件替换安装的应用。
3.权限声明机制
要想获得在对象上进行操作,就需要把权限和此对象的操作进行绑定。不同级别要求应用程序行使权限的认证方式也不一样,Normal级申请就可以使用,Dangerous级需要安装时由用户确认,Signature和Signatureorsystem级则必须是系统用户才可用。一般我们接触的比较多的就是Normal的声明和Dangerous的动态权限申请
• 通过manifest文件中声明以下属性:
• 通过以下属性添加自定义权限:
• 系统组件权限,如activity组件:
4.访问控制机制
确保系统文件和用户数据不受非法访问。尽量控制系统和程序的访问权限。
Linux用户权限:
基于共享内存的Binder实现,提供轻量级的远程进程调用(RPC)。通过接口定义语言(AIDL)定义接口与交换数据的类型,确保进程间通信的数据不会溢出越界,污染进程空间。至于这一块具体的Bindler机制,自己也没有理解的太透彻,大家有兴趣可以去看其他文章
6.内存管理机制
基于标准 Linux的低内存管理机制(OOM),设计实现了独特的低内存清理(LMK)机制,将进程按重要性分级、分组,当内存不足时,自动清理最低级别进程所占用的内存空间;同时,引入不同于传统Linux共享内存机制的Android共享内存机制Ashmem,具备清理不再使用共享内存区域的能力。