理解Android framework之AOSP:从内核到应用层

一、AOSP

Android framework确保设备的各个部件和程序顺利协同工作。对于想要全面了解 Android 设备内部工作原理、开发高质量应用、优化设备性能以及充分利用 Android 生态系统潜力的人来说,了解 Android 框架也是必不可少的。它是连接用户、开发者和 Android 平台的桥梁,使他们能够解锁新功能和新可能性。

从本质上讲,Android 框架是所有 Android 设备运行的基础。它提供了硬件和软件组件无缝通信和交互所需的基本基础架构。

了解框架如何管理系统资源、处理后台任务和确定进程优先级的用户可以采取主动措施来提高设备的性能和电池寿命。

***Android 开放系统平台 (AOSP)***是公开可用且可修改的 Android 源代码。任何人都可以下载并修改 AOSP 以用于其设备。AOSP 提供了完整且功能齐全的 Android 移动平台实现。
AOSP 架构

1.内核层

Android 操作系统的核心是 Linux 内核,它提供内存管理、设备驱动程序和进程管理等基本功能。它充当硬件和 Android 框架上层之间的桥梁。

2.硬件抽象层(HAL)

接下来,我们遇到了硬件抽象层,它将特定于硬件的功能抽象为 Android 框架可访问的标准化接口。此层可确保跨不同硬件配置的兼容性,从而将新设备无缝集成到 Android 生态系统中。

3. 本机库

从表面来看,许多原生库为 Android 系统的核心功能提供支持,从图形渲染到多媒体处理。这些库以 C 和 C++ 等语言编写,提供了推动用户体验进步所需的原始动力。

4.Android 运行时(ART)

进入 Android 运行时,Java 字节码通过预先 (AOT) 编译转换为机器码。ART 可确保 Android 应用程序高效执行,优化性能和资源利用率,从而实现更流畅的用户体验。

5.框架层

框架层包含丰富的 Java 类和 API,使开发人员能够构建引人入胜的 Android 应用程序。从 UI 组件到系统服务,框架层使开发人员能够创建引人入胜的沉浸式体验,吸引用户。

6.系统API

系统 API 代表仅供合作伙伴和 OEM 包含在捆绑应用中的 Android API。这些 API 在源代码中标记为 @SystemApi。

7.系统服务

系统服务是模块化的、集中的组件,例如system_server、SurfaceFlinger 和 MediaService。Android 框架 API 公开的功能与系统服务进行通信以访问底层硬件。
标题

二、下载并构建android代码

编译需要linux系统,可以考虑wsl2(wsl2是windows内置的linux子系统)。

具体使用可以参考适用于 Linux 的 Windows WSL子系统安装初体验_适用于 linux 的 windows 子系统已安装。-CSDN博客文章浏览阅读737次,点赞9次,收藏4次。Windows Subsystem for Linux (WSL) 是 Windows 的一项功能,允许您在 Windows 计算机上运行 Linux 环境,而无需单独的虚拟机或双重启动。 WSL 旨在为想要同时使用 Windows 和 Linux 的开发人员提供无缝且高效的体验。_适用于 linux 的 windows 子系统已安装。https://skydance.blog.csdn.net/article/details/137194510 源码很大,下载完大约需要100G,然后还需要编译,所以至少准备个300G的地方。

然后我们需要准备一些工具。Git:用于管理源代码的版本控制系统。 JDK(Java 开发工具包):编译 Java 代码所需。 Android SDK:提供用于构建 Android 应用程序的工具和库。

# 安装git
sudo apt-get install  git

# 配置git
git config --global user.name YourName
git config --global user.email you@example.com

# 安装python,ubuntu默认带了,可以查找一下,建立一个软连接
which python3
sudo ln -s /usr/bin/python3 /usr/bin/python

# 安装相关依赖
sudo apt install unzip zip libssl-dev  libffi-dev gnupg flex bison gperf build-essential  curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev libz-dev ccache libgl1-mesa-dev libxml2-utils xsltproc 

# 安装jdk
sudo apt-get install openjdk-8-jdk

安装"repo"工具

mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
cd bin
chmod +x repo

设置环境变量

vim ~/.bashrc
添加下面两行环境变量配置:
PATH=~/bin:$PATH
export REPO_URL=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
使环境变量生效:
source ~/.bashrc

初始化源码目录

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-13.0.0_r35 --depth=1

开始同步源码

repo sync -j8

编译源码

source build/envsetup.sh

选择构建目标

lunch aosp_<device>-userdebug

将<device>替换为设备的代号。"lunch"命令将显示可用构建配置的列表。为您的设备选择所需的配置。

开始构建

make -j8

刷机

刷新设备最方便的方法是取出其存储卡并将其插入到构建机器上的读卡器/写卡器中。不过更常见方式是使用fastboot。使设备进入快速引导模式的过程取决于硬件。在某些设备上,开机后立即按住某些按钮组合会使其进入快速启动模式。

几乎所有适合android的设备都可以通过命令"adb reboot bootloader"强制重新启动到快速引导模式。

>> cd ../../../../..
> pwd
/home/acme/workspace
> fastboot flash boot out/target/product/hikey960/boot.img
target reported max download size of 471859200 bytes
sending 'boot' (9650 KB)...
OKAY [  0.345s]
writing 'boot'...
OKAY [  0.124s]
finished. total time: 0.468s
> fastboot flash dts out/target/product/hikey960/dt.img
target reported max download size of 471859200 bytes
sending 'dts' (14 KB)...
OKAY [  0.047s]
writing 'dts'...
OKAY [  0.048s]
finished. total time: 0.095s
> fastboot flash system out/target/product/hikey960/system.img
target reported max download size of 471859200 bytes
sending sparse 'system' 1/3 (445539 KB)...
OKAY [203.250s]
writing 'system' 1/3...
OKAY [ 10.197s]
sending sparse 'system' 2/3 (447504 KB)...
OKAY [198.764s]
writing 'system' 2/3...
OKAY [  8.254s]
sending sparse 'system' 3/3 (109822 KB)...
OKAY [ 46.770s]
writing 'system' 3/3...
OKAY [  1.566s]
finished. total time: 468.801s
> fastboot flash cache out/target/product/hikey960/cache.img
target reported max download size of 471859200 bytes
sending 'cache' (4280 KB)...
OKAY [  0.189s]
"writing 'cache'...
OKAY [  0.154s]
finished. total time: 0.343s
> fastboot flash userdata out/target/product/hikey960/userdata.img
target reported max download size of 471859200 bytes
sending 'userdata' (147713 KB)...
OKAY [  4.627s]
writing 'userdata'...
OKAY [  5.587s]
finished. total time: 10.214s

执行上述命令后,设备将准备好使用新构建的映像启动。

参考链接

https://www.cnblogs.com/stlong/p/17654389.htmlhttps://www.cnblogs.com/stlong/p/17654389.html

相关推荐
帅得不敢出门2 小时前
安卓设备adb执行AT指令控制电话卡
android·adb·sim卡·at指令·电话卡
我又来搬代码了4 小时前
【Android】使用productFlavors构建多个变体
android
德育处主任6 小时前
Mac和安卓手机互传文件(ADB)
android·macos
芦半山6 小时前
Android“引用们”的底层原理
android·java
迃-幵6 小时前
力扣:225 用队列实现栈
android·javascript·leetcode
大风起兮云飞扬丶7 小时前
Android——从相机/相册获取图片
android
Rverdoser7 小时前
Android Studio 多工程公用module引用
android·ide·android studio
aaajj7 小时前
[Android]从FLAG_SECURE禁止截屏看surface
android
@OuYang7 小时前
android10 蓝牙(二)配对源码解析
android
Liknana7 小时前
Android 网易游戏面经
android·面试