-
Android 启动
- 开启电源、片上ROM代码执行:与芯片手册有关
-
启动加载程序
- 初始程序加载IPL:负责监测和建立外部RAM
- 第二阶段程序加载SPL:负责加载Android操作系统、Recovery等
- Linux内核
-
init进程
- 处理init脚本
- 与Linux的/etc/init.d类似,位于根目录
- HTC Incredible Android 2.2 有650行
- Zygote和Dalvik
- 系统服务器
- 启动完成
-
Android 安全模型
- 第一次安装时,通过检查能够识别开发者的数字签名检查.apk文件
- .apk文件验证后,检查权限列表
- 每个应用程序赋予唯一的用户ID和用户组,运行在自己的进程和Dalvik虚拟机里
- 每个应用专有目录,唯自己可访问
-
Android 文件系统与数据结构
- 内部存储器,只能位于/data/data/子目录下
-
外部存储器,可在任意位置存储
- 为实现SD卡接入,SD卡常按照FAT32格式格式化
- 缺少细化的安全机制
-
/data/data/<软件包名称>子目录
-
shared_prefs:共享优先
- 将基础数据类型的变量定义-数值位元组以XML形式储存
- 支持boolean/float/int/long/string
- lib:应用程序所需的自定义库文件
- files:文件
- cache:缓存
- databases:SQLite数据库和日志文件
-
日志
-
dmseg
- adb shell dmesg:Linux内核日志
- 不需要root,打开USB调试即可
-
logcat
- adb shell logcat:系统和应用程序调试信息
- 不需root
-
dumpsys
- adb shell dumpsys:服务、存储、系统其他方面细节信息
- 不需要root
- Device ID不是终端设备序号,而是MEID,用以在CDMA网络中唯一地识别设备
-
dumpstate
- adb shell dumpstate:将前述调试信息结合
- 部分需root权限
-
bugreport
- adb bugreport > bugreport.log:将logcat/dumpsys/dumpstate输出
-
内存
- Android提供了将应用程序所用内存转存在文件的机制
-
NAND Flash
- NAND Flash出场时就存在废块
- 将检测出的废块标识出来
-
NAND Flash操作
- 读(页、512~2048B)
- 写(页、512~2048B)
-
擦除(块、64*2KB=128KB)
- 整块全写1
- 唯一将0变1的机制
-
术语NAND Flash不带控制器
- U盘、SSD包括NAND Flash和控制器,由控制器完成废块管理、损耗度度量
- 若无eMMC,Android由软件控制NAND Flash,具体为Yaffs
- 使用寿命上讲,Yaffs比eMMC好
- 用ECC检测错误,当操作错误超过阀值时,将页或块标为不可用,写入废块表
-
文件系统
- 第一个使用EXT4的Android设备是Nexus S
- 采用eMMC后不需要Yaffs了
-
目录结构
- /data/app 包含从Android市场下载的.apk文件
- /data/dalvik-cache 保存了各app的dex文件
- /data/data 保存个app专用数据
- /data/local 专门留给shell使用,安装程序中转什么的
- /mnt/sdcard/secure/asec 是加密的,保存驻留SD卡的应用程序数据
- /system/app 保存系统apk和odex文件
- /system/bin 和 /system/xbin 包含系统使用的二进制文件
- /system/etc 保存配置
- Move to SD Card功能就是把apk从/data/app移动到/mnt/secure/asec,用户数据仍位于/data/data