(点击上方的蓝色文字,可快速关注我们)
No1.Android系统层级架构
5层依次:
应用层(Applications):应用apk,多java实现
框架层(Application Framework):提供给apk的API(如传说的Android四大组件:Activity、Broadcast Intent Receiver、Service、Content Provider)
核心库(Libraries):嵌入式“中间件”,多C++实现
运行环境层(Runtime):Dalvik虚拟机
Linux内核层(Linux Kernel):Linux2.6内核+移动设备驱动
No2.Android系统分区结构
常见的几大分区:
Boot Loader:“BIOS”,初始化软硬件环境、加载硬件设备
Boot:Android的boot镜像(Linux kernel、initrd…)
Splash:系统启动后第一屏显示内容(Logo、动画)
Radio:基带、与通信质量相关驱动(电话、GPS、蓝牙、WiFi…)
Recovery:“WinPE”、系统修复镜像
System:/system,Android系统镜像文件(Framework、Libraries、Binaries、预装应用)
User Data:/data,应用产生的图片、音频等数据
Cache:缓存(恢复日志、QTA下载的更新包、Dalvik缓存文件夹…)
No3. Android系统启动过程
No4.ADB
ADB(Android Debugging Bridge),分三部分,C/S架构,5037端口:
ADB Client:PC端运行,接收用户、工具的adb命令
ADB Server:PC端后台进程,用户Client与模拟器或真机的ADB守护进程通信
ADB Daemon:模拟器或真机后台守护进程
No5.Zygote
Zygote(“受精卵”):Android所有应用的独立进程都来源于zygote的复制,是所有应用程序Dalvik虚拟机的构造器。
No6.进程间通信Binder机制
Binder基于Open Binder修改而来的IPC机制(不同于传统Linux的IPC:管道、共享内存、消息队列、socket)
C/S架构,所有需要IBinder通信的进程实现IBinder接口,进程提供的服务向Service Manager注册,Service Manager守护进程负责调度:监听请求并分发处理。
No7.匿名共享内存机制Ashmem
Ashmem(Anonymous Shared Memory):/dev/ashmem,为用户空间程序提供分配内存的机制。基于内核提供的临时文件系统tmpfs实现,相对linux进行了更精细的管理,应用程序可动态将一块匿名共享内存划分为若干小块并在小块不需要使用时被内存管理回收,适应小内存移动设备。匿名共享内存由Ashmem驱动程序负责分配和管理,提供了C++/Java接口访问。使用文件描述符来描述一块匿名共享内存(非linux的整数(linux的整数只在进程空间生效)):可以方便映射到进程的地址空间;可用Binder进程间通信机制(BINDER_TYPE_FD)来传输文件描述符来实现共享。
No8.日志服务Logger
Logger的存在主要支持logcat查看日志缓冲区,分四类独立缓冲区:主缓冲区、广播缓冲区、事件缓冲区、系统缓冲区。
No9.APK编译过程
Zipalign:将签名后的apk文件进行对齐优化,最根本目的是帮助操作系统更高效率的根据请求索引资源,resource-handling code统一将Data structure alignment(数据结构对齐标准:DSA)限定为4-byte boundaries。方便处理器准确和快速的在内存地址中定位相关资源。
No10.Sandbox
Sandbox(沙箱):系统使用重定向技术将应用的所有操作都放到一个虚拟系统中运行。对Android来说就是每个apk进程隔离(每个程序都有唯一的AID)。
Android三类权限:
1)API权限:
四级(normal-系统默认授予、dangerous-安装时声明、signature-仅对同签名app开放、signatureOrSystem-在signature基础上增加ROM内嵌App声明)
2)文件权限:
三类用户(所有者、同组用户、其他用户),三类权限(r-文件只读、目录浏览,w-文件可写、目录可移动删除,x-文件可执行、目录可进入)
3)IPC权限:
进程间通信权限
No11.数字签名
数字签名优点:同签名才能覆盖安装、多个同签名应用运行在一个进程、互相共享数据和代码。
签名验证:/META-INF,1)通过CERT.RSA查找公钥和算法;2)对CERT.SF解密和签名验证,确认MANIFEST.MF安全;3)通过MANIFEST.MF逐项校验安装包资源的签名
No12.Android层级与安全措施
No13.AndroidManifest
AndroidManifest.xml:Android项目清单文件,作用:声明应用包名、版本号、component及运行在那个process下、应用需要的权限、自定义的权限、应用需要的Android API最低版本、需要的链接库、共享进程ID
No14.显/隐式Intent
显示Intent:
开发者在代码中使用具体的类或包名的方式进行新建和注册,由ActivityManager来传递Intent
隐式Intent:
开发者在AndroidManifest.xml中注册Intent-fillter,由System Service监听筛选Intent
No15.四大组件
No16.Dalvik虚拟机
Dalvik虚拟机:
Google专门为Android平台设计的虚拟机,区别与java虚拟机JVM,使用DEX(Dalvik Executable)可执行文件格式和指令集代码。Dalvik来源于冰岛一个小渔村的名字。
Smali:
对Dalvik虚拟机字节码的一种解释,是对dex的反汇编输出。Samli来源于冰岛语中的“汇编器”
No17.SEAndroid
SEAndroid(SELinux in Android):SELinux(Security Enhanced Linux)安全增强版Linux向Android系统的移植,支持MAC模型。中心理念:即使Root权限被篡夺也能阻止恶意操作行为。
No18.Root
Root:在Android设备中获得超级用户
欢迎加入互联网架构师群,共同交流和学习!
长按下方的二维码即可快速进群!!!