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

理解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.htmlicon-default.png?t=N7T8https://www.cnblogs.com/stlong/p/17654389.html

相关文章:

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

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

杂谈c语言——3.内存对齐

先看两个例子&#xff1a; typedef struct S {int a;double b;char c; }S;typedef struct B {int a;char b;double c; }B;int main() {printf("S : %d\n", sizeof(S));printf("B : %d\n", sizeof(B));return 0; } 结果为&#xff1a; S:24; B:16&#xff…...

瑞芯微Android设备指定应用开启性能模式

本文档主要针对特定应用&#xff08;如 安兔兔&#xff09;如何进行加速及性能的提升做相关说明。 快速开启方法 开启与关闭 在 device/rockchip/rk3xxx/下配置文件:package_performance.xml&#xff0c;在其中的节点中加入需要使用性能模式的包名&#xff1a;&#xff08;…...

ASP.NET Core基础 - 简介

目录 一. 简介 A、跨平台性 B、高性能 C、开源性 D、模块化与可扩展性 E、集成现代前端技术 二. ASP.NET 4.x 和 ASP.NET Core 比较 A、架构与平台支持 B、性能 C、开发体验 D、社区支持与生态系统 三. NET 与 .NET Framework 比较 A、概念范围 B、跨平台能力 C…...

Flask+LayUI开发手记(一):LayUI表格的前端数据分页展现

用数据表格table展示系统数据&#xff0c;是LayUI的基本功能&#xff0c;编码十分简单&#xff0c;就是通过table.render()渲染&#xff0c;把属性配置好就OK了&#xff0c;十分方便&#xff0c;功能也十分强大。 不过&#xff0c;在实现时&#xff0c;把table的有个功能却理解…...

Vulnhub靶场DC-9练习

目录 0x00 准备0x01 主机信息收集0x02 站点信息收集0x03 漏洞查找与利用1. 发现SQL注入点2. Sqlmap跑数据3. 文件包含4. SSH爆破端口敲门服务5. 提权&#xff08;写入/etc/passwd&#xff09; 0x04 总结 0x00 准备 下载链接&#xff1a;https://download.vulnhub.com/dc/DC-9.z…...

Java对象内存布局和对象头

文章目录 面试题Object object new Object() 谈谈你对这句话的理解&#xff1f; 对象在堆内存中存储布局权威定义&#xff08;周志明老师JVM第三版&#xff09;对象在堆内存中的存储布局详解对象头的MarkWord源码对象标记源码 对象内存布局&#xff08;使用JOL证明&#xff09…...

python:基于YOLO框架和遥感图像的目标检测

作者&#xff1a;CSDN _养乐多_ 本文将介绍如何通过YOLO框架和遥感图像进行目标检测的代码。 文章目录 一、数据集下载与格式转换1.1 NWPU VHR-10&#xff08;73.1 MB&#xff09;1.2 DIOR&#xff08;7.06 GB&#xff09;1.3 配置data.yaml 二、训练三、训练结果 一、数据集…...

DAMA学习笔记(十一)-元数据管理

1.引言 元数据最常见的定义是“关于数据的数据”。它描述了数据本身&#xff08;如数据库、数据元素、数据模型&#xff09;&#xff0c;数据表示的概念&#xff08;如业务流程、应用系统、软件代码、技术基础设施&#xff09;&#xff0c;数据与概念之间的联系&#xff08;关系…...

密码学基本理论

密码学是研究信息安全保护的科学,实现信息的保密性、完整性、可用性以及抗抵赖性 根据密码分析者在破译时已经具备的前提条件,密码分析攻击类型分类: 唯密文攻击:已知密文;未知明文+秘钥已知明文攻击:已知部分明文和密文对;未知秘钥+算法选择明文攻击:已知明文+算法--…...

【深度学习】【语音TTS】vits 论文,Variational Inference Text-to-Speech(1)

代码:https://github.com/jaywalnut310/vits 论文:https://arxiv.org/abs/2106.06103 文章目录 摘要1. 引言2. 方法2.1. 变分推理2.1.1. 概述2.1.2. 重构损失2.1.3. KL散度2.2. 对齐估计2.2.1. 单调对齐搜索2.2.2. 从文本预测时长2.3. 对抗训练2.4. 最终损失2.5. 模型架构2.5…...

javascript中 window 相关知识点以及代码演示

一.了解window 在JavaScript中&#xff0c;window对象是浏览器的全局对象&#xff0c;它不仅代表了浏览器窗口&#xff0c;同时也充当了ECMAScript中的Global对象的角色。因此&#xff0c;深入了解和掌握window对象的属性和方法对于JavaScript开发者来说至关重要。 以下内容将…...

企业社会责任(CSR)国际标准有哪些?

以下是一些常见的企业社会责任&#xff08;CSR&#xff09;国际标准和相关体系等&#xff1a; 原则性、指南性标准 ISO 26000《社会责任指南》 &#xff1a;将社会责任归纳为7个核心方面&#xff0c;即公司治理、人权、劳工、环境、公平运营实践、消费者问题以及对社会发展作贡…...

The C programming language (second edition,KR) exercise(CHAPTER 7)

E x c e r c i s e 7 − 1 Excercise\quad 7-1 Excercise7−1: #include <stdio.h> #include <string.h> #include <ctype.h>enum type {LOWER, UPPER };int main(int argc, char *argv[]) {int c, mode = -1;if (stricmp(*argv, "lower.exe") =…...

面向服务架构(SOA)介绍

在汽车电子电气架构还处于分布式时代时&#xff0c;汽车软件的开发方式主要是采用嵌入式软件进行开发&#xff0c;而随着汽车智能化程度的加深&#xff0c;更加复杂且多样的功能需求让汽车软件在复杂度上再上一层。在整车的自动驾驶方面&#xff0c;由于未来高阶自动驾驶能力的…...

关于使用Next遇到的一些新特性

用next之后发现&#xff0c;这是作为全栈比较好用的框架 API 1、app Router 这是目前next官方以及未来推荐的新技术方向 若使用api路由用来管理后端api接口 &#xff08;1&#xff09;此时在app文件夹下创建 api名称目录&#xff08;如 getApiKey&#xff09; &#xff08;…...

Python 爬虫入门(七):requests 库的使用「详细介绍」

Python 爬虫入门&#xff08;七&#xff09;&#xff1a;requests 库的使用「详细介绍」 前言1. 初识 requests1.1 安装 requests 库1.2 发送 GET 请求1.3 发送 POST 请求 2. HTTP 请求详解2.1 请求方法2.2 请求头2.3 请求参数 3. 处理响应3.1 响应内容3.2 响应状态码3.3 响应头…...

两端约束的最优控制问题及其数值解法

问题的基本形式 设 n n n维系统状态房产 x ˙ ( t ) f [ x ( t ) , u ( t ) , t ] \dot{x}(t)f[x(t),u(t),t] x˙(t)f[x(t),u(t),t]&#xff0c;控制向量 u ( t ) ∈ Ω u(t)\in\Omega u(t)∈Ω是分段连续函数&#xff0c; Ω ∈ R m \Omega\in R^m Ω∈Rm是有界闭集&#xf…...

电磁仿真--基本操作-CST-(6)-导线周围磁场

目录 1. 简介 2. 过程 2.1 新建工程 2.2 选择求解器 2.3 设置单位 2.4 设置频率 2.5 绘制导线 2.6 Background 2.7 边界条件 2.8 设置激励源 2.9 查看结果 3. 其他设置 3.1 网格类型 3.2 集总网络元件 3.3 阻抗和导纳矩阵 3.4 自适应网格细化 3.4 提升计算效率…...

用Java手写jvm之模拟方法调用指令invokexxx和方法返回指令xreturn

写在前面 源码 。 本文一起看下方法调用相关的指令invokexxx以及方法返回&#xff08;栈帧弹出线程栈&#xff09;相关的指令xReturn 。 1&#xff1a;正文 因为invokexxx指令和普通的指令不同&#xff0c;会创建一个新的栈帧&#xff0c;并压倒操作数栈中&#xff0c;所以我…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

现代密码学 | 椭圆曲线密码学—附py代码

Elliptic Curve Cryptography 椭圆曲线密码学&#xff08;ECC&#xff09;是一种基于有限域上椭圆曲线数学特性的公钥加密技术。其核心原理涉及椭圆曲线的代数性质、离散对数问题以及有限域上的运算。 椭圆曲线密码学是多种数字签名算法的基础&#xff0c;例如椭圆曲线数字签…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台

🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

CSS设置元素的宽度根据其内容自动调整

width: fit-content 是 CSS 中的一个属性值&#xff0c;用于设置元素的宽度根据其内容自动调整&#xff0c;确保宽度刚好容纳内容而不会超出。 效果对比 默认情况&#xff08;width: auto&#xff09;&#xff1a; 块级元素&#xff08;如 <div>&#xff09;会占满父容器…...

C++使用 new 来创建动态数组

问题&#xff1a; 不能使用变量定义数组大小 原因&#xff1a; 这是因为数组在内存中是连续存储的&#xff0c;编译器需要在编译阶段就确定数组的大小&#xff0c;以便正确地分配内存空间。如果允许使用变量来定义数组的大小&#xff0c;那么编译器就无法在编译时确定数组的大…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...

Win系统权限提升篇UAC绕过DLL劫持未引号路径可控服务全检项目

应用场景&#xff1a; 1、常规某个机器被钓鱼后门攻击后&#xff0c;我们需要做更高权限操作或权限维持等。 2、内网域中某个机器被钓鱼后门攻击后&#xff0c;我们需要对后续内网域做安全测试。 #Win10&11-BypassUAC自动提权-MSF&UACME 为了远程执行目标的exe或者b…...

aurora与pcie的数据高速传输

设备&#xff1a;zynq7100&#xff1b; 开发环境&#xff1a;window&#xff1b; vivado版本&#xff1a;2021.1&#xff1b; 引言 之前在前面两章已经介绍了aurora读写DDR,xdma读写ddr实验。这次我们做一个大工程&#xff0c;pc通过pcie传输给fpga&#xff0c;fpga再通过aur…...