当前位置: 首页 > news >正文

02-06-01 Android系统架构深入

02-06-01 Android系统架构深入

1. 概述

Android系统是基于Linux内核的分层架构,从下到上分为:Linux内核、硬件抽象层(HAL)、Native库、Android Runtime、Framework层、应用层。理解系统架构是进行Framework开发、系统定制、性能优化的基础。

2. 系统架构分层

┌─────────────────────────────────────────────┐ │ Application Layer (应用层) │ │ System Apps | Third-party Apps │ ├─────────────────────────────────────────────┤ │ Application Framework (框架层) │ │ ActivityManager | PackageManager | WMS │ ├─────────────────────────────────────────────┤ │ Binder IPC | System Server │ ├─────────────────────────────────────────────┤ │ Android Runtime (运行时) | Native │ │ ART/Dalvik | Core Libraries | NDK │ ├─────────────────────────────────────────────┤ │ Hardware Abstraction Layer (HAL层) │ │ Camera HAL | Audio HAL | Sensor HAL │ ├─────────────────────────────────────────────┤ │ Linux Kernel (内核层) │ │ Drivers | Binder Driver | Power Mgmt │ └─────────────────────────────────────────────┘

3. Linux内核层

Android基于Linux内核,提供核心系统服务:

3.1 核心功能

功能说明
进程管理调度、创建、销毁进程
内存管理虚拟内存、页面置换
文件系统ext4、f2fs文件系统
网络协议栈TCP/IP、Socket
驱动程序设备驱动、Binder驱动
电源管理休眠、唤醒锁

3.2 关键驱动

// Binder驱动接口structbinder_transaction_data{void*target;void*cookie;unsignedintcode;unsignedintflags;pid_tsender_pid;uid_tsender_euid;size_tdata_size;size_toffsets_size;union{struct{constvoid*buffer;constvoid*offsets;}ptr;uint8_tbuf[8];}data;};

4. HAL层

硬件抽象层屏蔽底层硬件差异,为Framework提供统一接口。

4.1 HAL架构

Framework ↓ JNI Native Service ↓ dlopen HAL Module (.so) ↓ ioctl Kernel Driver

4.2 HAL模块示例

// hardware/libhardware/include/hardware/sensors.hstructsensors_module_t{structhw_module_tcommon;int(*get_sensors_list)(structsensors_module_t*module,structsensor_tconst**list);};// 加载HAL模块conststructhw_module_t*module;hw_get_module(SENSORS_HARDWARE_MODULE_ID,&module);

5. Native层

Native层包含C/C++库和Android运行时。

5.1 核心库

功能
libc (Bionic)Android定制C库
libm数学库
liblog日志库
libcutils工具库
libsqliteSQLite数据库
libssl/libcryptoSSL/TLS加密
libmedia多媒体框架
libsurfaceflinger图形合成

5.2 Bionic特点

// Bionic vs glibc// 1. 体积更小(~1MB vs ~2.5MB)// 2. 启动更快// 3. 专为移动设备优化// 4. 支持Android特有功能(如Properties)// Android属性系统#include<sys/system_properties.h>charvalue[PROP_VALUE_MAX];__system_property_get("ro.build.version.sdk",value);

6. Framework层

Framework层是Android系统核心,提供丰富的API。

6.1 System Server

System Server是Framework的核心进程,运行所有系统服务:

// frameworks/base/services/java/com/android/server/SystemServer.javapublicfinalclassSystemServer{privatevoidstartBootstrapServices(){// 启动核心服务mActivityManagerService=ActivityManagerService.Lifecycle.startService(mSystemServiceManager);mPowerManagerService=mSystemServiceManager.startService(PowerManagerService.class);mPackageManagerService=PackageManagerService.main(...);}privatevoidstartCoreServices(){// 启动核心服务mSystemServiceManager.startService(BatteryService.class);mSystemServiceManager.startService(UsageStatsService.class);}privatevoidstartOtherServices(){// 启动其他服务WindowManagerServicewm=WindowManagerService.main(...);InputManagerServiceinputManager=newInputManagerService(...);// ...}}

6.2 主要系统服务

服务功能
ActivityManagerService管理Activity、Service、BroadcastReceiver
PackageManagerService应用安装、卸载、权限管理
WindowManagerService窗口管理、层级管理
PowerManagerService电源管理、休眠唤醒
ConnectivityService网络连接管理
LocationManagerService位置服务

7. 应用层

应用层包括系统应用和第三方应用。

7.1 系统应用

packages/apps/ ├── Launcher3 # 桌面启动器 ├── Settings # 设置 ├── Phone # 电话 ├── Contacts # 联系人 ├── Camera2 # 相机 ├── Gallery2 # 图库 └── SystemUI # 状态栏、通知

8. 启动流程

8.1 系统启动流程

1. BootLoader ↓ 2. Linux Kernel ↓ 3. Init进程 (pid=1) ↓ 解析init.rc 4. Zygote进程 ↓ 预加载类和资源 5. System Server ↓ 启动系统服务 6. Launcher ↓ 7. 应用启动

8.2 Zygote启动

// frameworks/base/core/java/com/android/internal/os/ZygoteInit.javapublicstaticvoidmain(Stringargv[]){// 1. 预加载类preload();// 2. 启动System Serverif(startSystemServer){startSystemServer(...);}// 3. 进入Loop,等待fork请求runSelectLoop(abiList);}staticvoidpreload(){preloadClasses();// 预加载常用类preloadResources();// 预加载资源preloadOpenGL();// 预加载OpenGLpreloadSharedLibraries();// 预加载so库}

9. Binder通信

Binder是Android特有的IPC机制,是Framework的基础。

9.1 Binder架构

Client ↓ transact() Binder驱动 (/dev/binder) ↓ onTransact() Server

9.2 AIDL示例

// IMyService.aidlinterfaceIMyService{StringgetData(intid);voidsetData(intid,Stringvalue);}// 服务端publicclassMyServiceextendsService{privatefinalIMyService.Stubbinder=newIMyService.Stub(){@OverridepublicStringgetData(intid){return"data_"+id;}@OverridepublicvoidsetData(intid,Stringvalue){// 实现逻辑}};@OverridepublicIBinderonBind(Intentintent){returnbinder;}}// 客户端IMyServiceservice=IMyService.Stub.asInterface(binder);Stringdata=service.getData(100);

10. 性能优化

10.1 启动优化

// 延迟初始化非关键组件publicclassApplicationextendsandroid.app.Application{@OverridepublicvoidonCreate(){super.onCreate();// 核心组件立即初始化initCrashReporter();// 非核心组件延迟初始化Handlerhandler=newHandler(Looper.getMainLooper());handler.postDelayed(()->{initImageLoader();initAnalytics();},3000);}}

10.2 内存优化

// 使用Application Context避免内存泄漏publicclassMyManager{privatestaticMyManagersInstance;privateContextmContext;publicstaticMyManagergetInstance(Contextcontext){if(sInstance==null){synchronized(MyManager.class){if(sInstance==null){sInstance=newMyManager(context.getApplicationContext());}}}returnsInstance;}privateMyManager(Contextcontext){mContext=context;}}

总结

Android系统架构是分层设计,各层职责清晰:

  1. Linux内核:提供核心系统服务
  2. HAL层:屏蔽硬件差异
  3. Native层:高性能C/C++库
  4. Framework层:Java API和系统服务
  5. 应用层:系统应用和第三方应用

理解系统架构是进行Framework开发、系统定制、性能优化的基础。

下一篇预告:《Binder机制详解》

http://www.jsqmd.com/news/466692/

相关文章:

  • 开题卡住了?一键生成论文工具 千笔写作工具 VS PaperRed
  • QuPath生物图像分析全攻略:从项目管理到智能检测的完整工作流
  • 02-06-02 Binder机制详解
  • Unity Package发布全攻略:如何将你的工具分享给团队或社区(附避坑指南)
  • Grafana+Loki+Alloy日志平台搭建避坑指南:从Docker配置到Grafana可视化全流程
  • 造相-Z-Image-Turbo开发环境搭建:IntelliJ IDEA中的Python项目配置
  • 告别环境配置!Swift-All一键脚本实测:小白也能玩转大模型
  • SUPER COLORIZER持续集成与部署(CI/CD):自动化测试与镜像更新流水线搭建
  • 手柄协议转换全攻略:让老式手柄焕发新生的技术实践
  • 造相-Z-Image-Turbo 运维指南:长期稳定运行的监控与维护策略
  • ESP32-P4 模拟I²C与I²S寄存器级驱动开发实战
  • 别再用UI改配置了!VS Code高手都在直接编辑settings.json的3个理由
  • 深度学习新手福音:PyTorch-2.x-Universal-Dev-v1.0环境部署全流程
  • Stable-Diffusion-v1-5-Archive 嵌入式系统联动初探:通过STM32采集数据触发图像生成
  • 伏羲天气预报从零部署:无公网环境离线安装pip依赖与模型文件
  • 向量重排序接入竟需17个参数校准?Dify官方未公开的Rerank调试矩阵(含Latency/Precision权衡公式)
  • DeOldify赋能内容创作:为自媒体历史题材视频智能上色片段
  • 非华为电脑也能用多屏协同?最新华为电脑管家破解版安装全攻略
  • ESP32-P4比特调节器:可编程比特级数据流引擎实战指南
  • 5分钟搞定n8n桌面版安装,无需命令行也能玩转自动化工作流
  • ChatTTS离线部署实战:从模型导出到高性能推理优化
  • M2LOrder模型部署成本优化:按需伸缩与混合精度计算实践
  • 大数据架构中的备份与容灾方案设计与实现
  • 从OCV到CPPR:数字芯片时序分析的悲观量消除全指南(附SI影响解析)
  • cv_resnet101_face-detection_cvpr22papermogface模型微调指南:基于自定义数据集的LoRA适配
  • 实战指南:基于快马平台开发并部署一个可商用的ai内容摘要工具
  • 高效深度定制:Obsidian Style Settings打造个性化知识管理界面
  • ComfyUI工作流集成RVC:可视化AI语音生成管线搭建
  • YOLOv12实战:开箱即用镜像,手把手教你跑通目标检测全流程
  • PP-DocLayoutV3与STM32嵌入式系统集成方案