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

news2024/11/25 16:16:09

一、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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1985957.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高效录屏指南:四大电脑录屏必备工具推荐!

在数字化时代&#xff0c;无论是工作汇报、在线教育还是游戏直播&#xff0c;电脑录屏已经成为了一项不可或缺的技能。今天&#xff0c;我们就来探索一下市面上几款备受好评的录屏工具&#xff1a;福昕录屏大师、转转大师录屏、爱拍录屏、嗨格式录屏大师&#xff0c;看看它们各…

基于RFID技术的智能压缩机装配线优化方案

基于RFID技术的智能压缩机装配线优化方案 传统压缩机装配线往往存在诸多痛点&#xff0c;如生产线单一、无法满足多元化和个性化的市场需求&#xff1b;生产数据滞后&#xff0c;导致产品统计的及时性和准确性无法得到保证&#xff1b;质量问题追溯困难&#xff0c;无法快速准…

c/c++ 为数组整体赋初值

目录 声明 一.整体赋值为0、“”或‘ ’ 二.整体赋值为其他 1.利用for循环赋值 2.逐个赋值 声明 为让c/c的朋友都看懂&#xff0c;本文将采取c语言为大家讲解 一.整体赋值为0、“”或‘ ’ 为什么把0、“”或‘ ’这三种情况单独调出来呢&#xff0c;因为如果将数组定义…

日股暴涨暴跌,港股恐将遭受波及!

近日海外市场波动较大&#xff0c;比如美国、日本等市场的走势可谓是“上蹿下跳”。港股市场也因此受到影响。众所周知&#xff0c;影响股票市场走势的重要因素之一是资金面&#xff0c;这一表现影响大盘及个股的走势。在港股市场&#xff0c;卖空数据作为关键指标备受关注。 …

铲屎官的好帮手,去猫咪浮毛神器——宠物空气净化器分享

养猫的家庭普遍面临一个共同的挑战&#xff1a;即便是刚经过一番精心打扫的居住环境&#xff0c;不出两日&#xff0c;家具表面、地板乃至家中各个缝隙便悄无声息地被一层细腻柔软的猫毛轻轻覆盖。这一现象&#xff0c;很大程度上归咎于猫咪的日常活跃与季节性的换毛过程。不仅…

ACL 2024 Oral | 大模型也会被忽悠?揭秘AI的信念之旅

地球是平的吗&#xff1f; 当然不是。自古希腊数学家毕达哥拉斯首次提出地圆说以来&#xff0c;现代科学技术已经证明了地球是圆形这一事实。 但是&#xff0c;你有没有想过&#xff0c;如果 AI 被误导性信息 “忽悠” 了&#xff0c;会发生什么&#xff1f; 来自清华、上海…

网络面经

1.TCP头格式有哪些&#xff1f; 图解TCP头部格式 详情 源端口和目的端口 端口的作用是什么&#xff1f; 端口的作用是在网络中唯一表示一台主机中的一个进程 序列号 什么是序列号&#xff1f; 用来给传输的字节标号的 比如要传10个字节 那么给第一个字节标号为1001 那么第十…

周鸿祎哈佛演讲摘要:大模型创业要抓住中国机会

时间:2024/04/13(美东时间) 地点:美国波士顿哈佛大学 *演讲语言为中文&#xff0c;“因为我的英文就比are you OK 的水平高一点点”。 1、无论你是一个创业者&#xff0c;还是一个企业家&#xff0c;最重要的一点说要跟用户保持接触&#xff0c;要去聊天&#xff0c;跟用户对话…

测试环境搭建整套大数据系统(十八:ubuntu镜像源进行更新)

镜像源更新为清华源 报错显示 解决方案 做好备份 cp /etc/apt/sources.list /etc/apt/sources.list.bak查看配置信息 sudo vim /etc/apt/sources.listsudo sed -i s/cn.archive.ubuntu.com/mirrors.aliyun.com/g /etc/apt/sources.list sudo apt update

Java学习Day22:基础篇12

异常 1.什么是异常 2.继承体系 3.异常和错误的区别 4.异常处理 1.抛出异常throw public class err { public static void main(String[] args) { add(1,0); } static void add(int a,int b){ if (b0) { throw new ArithmeticExcepti…

【Linux】Linux重定向指南:探索输出重定向与追加重定向的奥秘!

欢迎来到 CILMY23 的博客 &#x1f3c6;本篇主题为&#xff1a;Linux重定向指南&#xff1a;探索输出重定向与追加重定向的奥秘&#xff01; &#x1f3c6;个人主页&#xff1a;CILMY23-CSDN博客 &#x1f3c6;系列专栏&#xff1a;Python | C | C语言 | 数据结构与算法 | 贪…

css水波浪动画效果

为缩小gif大小&#xff0c;动画效果做了加速&#xff0c;效果如下&#xff1a; <!DOCTYPE html> <html> <head> <style> *{padding:0;margin:0;}/*清除默认填充及边距*/.water{position:relative;width:100vw;height:100vh;overflow:hidden;background…

std::string 的特性

s1是自己实现的string std的string里面有一个——Buf的数组大小为16通过内存对齐之后就是28个字节 如果存储的字符串大小不超过Buf数组的大小就存在里面&#xff0c;如果字符串的大小超过16字节就会重新开辟空间就会把Buf的空间浪费掉这是一种空间换时间的设计。

标准IO和文件IO

标准IO 接上节 函数接口 &#xff08;1&#xff09;fseek函数&#xff1a; 1.功能&#xff1a;将文件流中的文件指针从指定的起始位置开始偏移指定的字节数。 2.参数&#xff1a;&#xff08;目标文件&#xff0c;偏移量&#xff0c;参考点&#xff09; stream&#xff1a;…

一个网络上计算机的通信

一台计算机上多个进程间的通信方式有&#xff1a;管道、共享内存、信号量、消息队列。如果不同的计算机上多个进程间通信&#xff0c;即通信的进程在不同的计算机上&#xff0c;需要用到网络相关的知识。 那么两台计算机通信需要解决哪些问题&#xff1f; 我们来回顾一下计算机…

【电路笔记】-无源衰减器

无源衰减器 文章目录 无源衰减器1、概述2、简单衰减器3、无源衰减器示例14、无源衰减器设计5、切换式衰减器6、总结无源衰减器是一种特殊类型的电气或电子双向电路,由完全电阻元件组成。 1、概述 无源衰减器基本上是两个端口电阻网络,旨在将电源提供的功率削弱或“衰减”(因…

什么是企业组网?

企业组网是通过网络技术将企业内的各种设备、系统和资源连接起来&#xff0c;实现信息共享、通信协作、资源优化和业务流程高效管理的过程。其核心目标是建立一个稳定、灵活、安全且高效的网络基础架构&#xff0c;以支撑企业的运营和发展。本文将详细介绍搭建企业组网需要考虑…

Linux操作系统学习之文件系统

一. 前言 Linux一切皆文件的思想可谓众所周知&#xff0c;而其文件系统又是字符设备、块设备、管道、进程间通信、网络等等的必备知识&#xff0c;因此其重要性可想而知。本文将先介绍文件系统基础知识&#xff0c;然后介绍最重要的结构体inode以及构建于其上的一层层的文件系…

显示类控件

目录 1.Label 代码示例: 显示不同格式的文本 代码示例: 显示图片 代码示例: 文本对齐, 自动换行, 缩进, 边距 代码示例: 设置伙伴 2.LCD Number 代码示例: 倒计时 3.ProgressBar 代码示例: 设置进度条按时间增长 代码示例: 创建一个红色的进度条 4.Calendar Widget …

【C#】计算多边形的面积

一、问题分析 在 C# 中计算多边形面积的一种常见方法是使用顶点坐标。 假设您有一个由一系列 (x, y) 顶点坐标定义的多边形&#xff0c;您可以使用“鞋带公式”&#xff08;也称为高斯公式&#xff09;来计算其面积。 如果是计算多边形的面积可以分为正常多边形、dicom图像中…