• Android笔记


    Android 系统架构

    1. 应用层:系统内置应用和第三方应用(apk)。
    2. 应用框架层:为开发人员提供开发应用程序的API,简称:Framework层。
    名称功能描述
    Activity Manager(活动管理器)管理各个程序生命周期,以及常用的导航回退功能
    Location Manager(位置管理器)提供定位服务
    Package Manager(包管理器)管理所有安装在Android系统上的应用
    Notification Manager(通知管理器)使得应用程序可以在状态栏中显示自定义的提示信息
    Resource Manager(资源管理器)提供应用程序使用的各种非代码资源,如:视频图片、布局、颜色文件等。
    Telephone Manager(电话管理器)管理所有移动设备功能
    Windows Manager(窗口管理器)管理所有开启的窗口程序
    Content Provide(内容提供器)使不同应用之间可以共享数据
    View System(视图系统)构成应用程序的基本条件
    1. 系统运行库层(Native):C/C++程序库和Android运行库。 核心库提供了 Java 语言核心库的大多数功能,这样开发者可以使用 Java语言来编写 Android 应用。与 JVM 相比,Dalvik 虚拟机(DVM)是专门为移动设备定制的,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个 Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。而替代 DVM的 ART 的机制与 DVM 不同,DVM 中的应用每次运行时,字节码都需要通过即时编译器(Just In Time,JIT)转换为机器码,这会使得应用的运行效率降低。而在 ART 中,系统在安装应用时会进行一次预编译(Ahead Of Time,AOT),将字节码预先编译成机器码并存储在本地,这样应用每次运行时就不需要执行编译了,运行效率也大大提高。
    名称功能描述
    OpenGL ES3D绘图库
    LibC标准C系统函数库,专门为嵌入式Linux系统定制
    Media Framework多媒体库,支持常用的音频,视频格式录制和回放
    SQLite轻型的关系型数据库
    SGL底层的2D图形渲染
    SSL数据传输安全协议(加密),https就是添加了SSL
    FreeType字体引擎
    1. 硬件抽象层(HAL):位于操作系统内核(Linux系统)和硬件之间的接口层,将硬件抽象化,为了保护硬件厂商的知识产权。
    2. Linux内核,在此基础上添加了Android专用驱动。安卓系统的系统安全性、内存管理、网络协议栈和驱动模型等都是依赖与Linux内核。

    在这里插入图片描述

    系统目录

    在这里插入图片描述
    在这里插入图片描述
    应用框架层是系统的核心部分,一方面向上提供接口给应用层调用,另一方面向下与C/C++程序库及硬件抽象层等进行衔接。应用框架层的主要实现代码在 frameworks目录下面。
    在这里插入图片描述

    C/C++程序库部分

    系统运行库层(Native)中的 C/C++程序库的类型繁多,功能强大,C/C++程序库并不完全在一个目录中。部分目录如下:
    在这里插入图片描述

    Android 系统启动

    init进程启动过程

    init 进程是 Android 系统中用户空间的第一个进程,进程号为 1,是 Android 系统启动流程中一个关键的步骤,作为第一个进程,它被赋予了很多极其重要的工作职责,比如创建 Zygote(孵化器)和属性服务等。init 进程是由多个源文件共同组成的,这些文件位于源码目录 system/core/init 中。

    过程:

    1. 启动电源以及系统启动。
      当电源按下时引导芯片代码从预定义的地方(固化在 ROM)开始执行。加载引导程序BootLoader 到 RAM 中,然后执行。
    2. 引导程序 BootLoader
      引导程序 BootLoader 是在 Android 操作系统开始运行前的一个小程序,它的主要作用是把系统 OS 拉起来并运行。
    3. Linux 内核启动
      当内核启动时,设置缓存、被保护存储器、计划列表、加载驱动。在内核完成系统设置后,它首先在系统文件中寻找 init.rc 文件,并启动 init 进程。
    4. init 进程启动
      init 进程做的工作比较多,主要用来初始化和启动属性服务,也用来启动 Zygote 进程。从上面的步骤可以看出,当我们按下启动电源时,系统启动后会加载引导程序,引导程序又启动 Linux 内核,在 Linux 内核加载完成后,第一件事就是要启动 init 进程。
      init 的 main 函数做了很多事情.在开
      始的时候创建和挂载启动所需的文件目录,其中挂载了 tmpfs、devpts、proc、sysfs 和 selinuxfs 共 5 种文件系统,这些都是系统运行时目录,顾名思义,只在系统运行时才会存在,系统停止时会消失。

    解析init.rc

    init.rc 是一个非常重要的配置文件,它是由 Android 初始化语言(Android Init Language)编写的脚本,这种语言主要包含 5 种类型语句:Action、Command、Service、Option 和 Import。
    属性服务

    属性服务

    Windows 平台上有一个注册表管理器,注册表的内容采用键值对的形式来记录用户、软件的一些使用信息。即使系统或者软件重启,其还是能够根据之前注册表中的记录,进行相应的初始化工作。Android 也提供了一个类似的机制,叫作属性服务。init 进程启动时会启动属性服务,并为其分配内存,用来存储这些属性,如果需要这些属性直接读取就可以了。

  • 相关阅读:
    为什么价格监测要精确到款式
    生成多层迷宫-wilson算法
    天鹰340亿(AquilaChat2-34B-16K)本地部署的解决方案
    微擎模块 志汇-门店会员卡小程序 4.8.0 前端+后端开源版
    什么是WPF的值转换器
    Scala 基础 (三):运算符和流程控制
    数组的详细剖析
    在github上部署静态页面
    vue3+ts项目02-安装eslint、prettier和sass
    shell清理日志,通过mtime筛选文件时间
  • 原文地址:https://blog.csdn.net/for_syq/article/details/132239096