【Framework】🤡 速通 Android AOSP基础(上)

简介: 本文并非笔者亲身实践,是借鉴了参考文献处几位大佬的文章总结得出。asop源码的下载费时,笔者没有编译扫写源码的需求,只是解BUG或了解底层机制时看看源码,SDK自带的android.jar和一些在线源码站点已经够用。环境搭建流程基本是一致的,遇到问题善用搜索引擎~

0x1、名词


① AOSP


中文官网source.android.google.cn/


Android Open Source Package,安卓系统开源源码包,Android移动终端平台 (高通、MTK等) 先基于原生的Android代码进行更改,形成自己的平台代码,其他 手机厂商 再根据平台代码提供自己的移动端解决方案 (系统定制)。


asop源码编译后会生成一系列的产物(out目录下):


  • /out/host → Android开发工具相关的产物,包含各种SDK工具,如adb、dex2oat、aapt等;


  • /out/target/common → 一些通用的编译产物,包含Java应用代码和Java库;


  • /out/target/product/[product_name] → 针对特定设备的编译产物,以及平台相关C/C++代码与二进制文件(如system.img、ramdisk.img、userdata.img、boot.img等);


我们平时在AS里看到的源码库 android.jar 是打包后的 classes.jar,详细路径:out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/classes.jar。以前在一些场景,需要使用SDK中隐藏的API (@hide注解),一种解法就是用aosp编译生成的classes.jar替换原生sdk中的android.jar。具体导入示例可见:《Android Studio 3.5导入AOSP编译的classes.jar》


② Gerrit


Android使用Git作为代码管理工具,开发了 Gerrit 进行 代码审核,以便更好地对代码进行集中式管理。实际上就是一个 Git服务器,它为在其服务器上托管的Git仓库提供了一系列 权限控制,以及一个用作Code Review 的 Web页面。


③ Repo


Repo命令行工具,用Python对Git命令进行封装,简化对多个Git库的集中式管理。


0x2、Repo工作流


如下图:


网络异常,图片无法展示
|


简要描述下关键命令:


  • repo init → 在当前目录下初始化Repo,生成 .repo 目录,其中会包含一个 manifest.xml 文件,列出每个project的克隆方式 (版本库地址、和工作区地址的对应关系、分支对应关系等);


  • repo sync → 同步所有project到本地工作区;


  • repo start → 创建并切换到本地工作分支;


  • Git相关命令 → 本地修改某些Project的代码,常规提交;


  • repo upload → 将代码修改发布到审核服务器;


  • repo prune → 功能开发完,合并后,安全移除过时主题分支;


更详细内容可参见:《源代码控制工作流程》


0x3、系统准备


只是单纯下载源码,啥系统都可以,但如果还想进行编译的话,需要 LinuxMac OS 系统。


Windows想编译的话,可以通过 虚拟机 安装上述系统间接达成,常规方式:DockerVirtualBox。后者安装示例可见:《Android AOSP基础(一)VirtualBox 安装 Ubuntu》


更详细内容可参见:《搭建构建环境》


0x4、源码下载


走一波下述命令~


# ① 安装Git、Curl、Python,有些系统自带~
sudp apt-get install git
sudo apt-get install curl
sudo apt-get install python
# ② 创建bin,并添加到PATH中
mkdir ~/bin
PATH=~/bin:$PATH
# ③ 下载Repo工具,并设置为可执行
# Tips:国外源可能有问题,可以替换为国内镜像,比如:https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
# ④ 创建工作文件目录 (存源码)
mkdir aosp
cd aosp
# Tips:Repo在运行过程中会尝试访问官方Git源更新自己,如果想用tuna镜像更新,可复制
# 下述内容到~/.bashrc中
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
# ⑤ Git设置身份信息(名字、邮箱)
git config --global user.name  "User Name"
git config --global user.email "user@example.com"
# ⑥ 初始化仓库 (同样支持替换镜像源)
repo init -u https://android.googlesource.com/platform/manifest
# 也支持指定分支,可选值查看:https://source.android.com/source/build-numbers#source-code-tags-and-builds
repo init -u https://android.googlesource.com/platform/manifest -b android-9.0.0_r8 
# ⑦ 同步代码 (拉取aosp源码到工作目录,一般要几个小时)
repo sync
# Tips:下载过程可能出现某些project找不到,可能是镜像问题,也可能是网的问题,
# 试试可以单独同步该项目,支持-jN参数,-j4如:
repo sync -c platform/frameworks/layoutlib
# 附:asop不包含内核代码,有需要可以单独下载,版本有很多,如:
# common → 通用linux内核、goldfish → Android模拟器内核、msm → 高通MSM芯片
mkdir kernel
cd kernel
git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
cd goldfish
# 可以查看有哪些内核版本分支可以下载
git branch -a
# 下载对应版本内核代码
git checkout remotes/origin/android-goldfish-3.4


更详细内容可参见:《下载源代码》


另外,国外镜像难免不稳定,也可以直接用  清华镜像,首次同步容易失败,建议先用迅雷等软件直接下载初始化包 aosp-latest.tar 进行初始化,然后再同步。


相关文章
|
10月前
|
编解码 Ubuntu Java
Android学习framework及搭建环境
Android学习framework及搭建环境
118 0
“framework必会”系列:Android Input系统(一)事件读取机制
曾经在开发的很长一段时间内,笔者对点击事件的认知只存在于自定义View中的`onTouchEvent`等方法的处理。 后来慢慢的接触到`Android的事件分发机制`,但也只是在**Activity->ViewGroup->View**层面的分发逻辑
|
2月前
|
安全 Linux Android开发
Android最强保活黑科技的最强技术实现,2024年最新阿里资深Android开发带你搞懂Framework
Android最强保活黑科技的最强技术实现,2024年最新阿里资深Android开发带你搞懂Framework
Android最强保活黑科技的最强技术实现,2024年最新阿里资深Android开发带你搞懂Framework
|
2月前
|
存储 编解码 API
Android Media Framework(一)OpenMAX 框架简介
OpenMAX IL是Khronos Group为嵌入式和移动设备设计的低层级接口,用于统一调用音频、视频和图像编解码器,确保跨平台兼容性。它包括Core API(管理组件加载和方法调用)和Component API(组件实现,如源、接收器、编解码器等)。组件通过端口进行数据交互,客户端使用Core API加载和控制组件。Android引入OMX IL以支持不同芯片上的编解码器。组件状态包括Loaded、Idle、Executing和Invalid。组件架构涉及参数配置、命令处理和缓冲区管理,数据交换通过回调函数完成,端口持有预分配或组件自分配的缓冲区。
|
2月前
|
API Android开发
Android Framework增加API 报错 Missing nullability on parameter
Android Framework增加API 报错 Missing nullability on parameter
70 1
|
Ubuntu Java 机器人
Android AOSP入门之环境搭建
最近在做移动机器人项目,要给机器人做一个头台,搭载Android操作系统,要为系统做一些定制。在 好多年前,还是Android 5.0以下系统的时候做游戏画面采集做个AOSP的编译,那个时候电脑配置查,网络也差,搭建一次环境特别费劲。编译完还没有现成的设备可以给刷,一直也没有真正的framework和内核、驱动层的开发经验,现在有了实际的需求了,硬着头皮开搞。
601 0
|
Java Android开发 数据安全/隐私保护
android10.0(Q) AOSP 增加应用锁功能
android10.0(Q) AOSP 增加应用锁功能
160 0
|
API Android开发
Android11.0(R) framework 新增类 lint 编码检查问题
Android11.0(R) framework 新增类 lint 编码检查问题
1074 0
|
XML 存储 设计模式
Android Framework知识整理:WindowManager体系(上)
本篇是Android framework的第一讲《WindowManager体系-上》,重在讲解Window在被添加到WindowManagerService前的流程。