【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 进行初始化,然后再同步。


相关文章
|
编解码 Ubuntu Java
Android学习framework及搭建环境
Android学习framework及搭建环境
147 0
|
4月前
|
Ubuntu 开发工具 Android开发
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
本文介绍了在基于Ubuntu 22.04的环境下配置Python 3.9、安装repo工具、下载和同步AOSP源码包以及处理repo同步错误的详细步骤。
245 0
Repo下载AOSP源码:基于ubuntu22.04 环境配置,android-12.0.0_r32
|
4月前
|
JavaScript 前端开发 Java
[Android][Framework]系统jar包,sdk的制作及引用
[Android][Framework]系统jar包,sdk的制作及引用
97 0
|
4月前
|
Android开发 Docker 容器
docker中编译android aosp源码,出现Build sandboxing disabled due to nsjail error
在使用Docker编译Android AOSP源码时,如果遇到"Build sandboxing disabled due to nsjail error"的错误,可以通过在docker run命令中添加`--privileged`参数来解决权限不足的问题。
756 1
|
4月前
|
开发工具 uml git
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
本文分享了下载AOSP源码的方法,包括如何使用repo工具和处理常见的repo sync错误,以及配置Python环境以确保顺利同步特定版本的AOSP代码。
493 0
AOSP源码下载方法,解决repo sync错误:android-13.0.0_r82
|
4月前
|
Java Android开发 芯片
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
本文介绍了如何将基于全志H713芯片的AOSP Android源码导入Android Studio以解决编译和编码问题,通过操作步骤的详细说明,展示了在Android Studio中利用代码提示和补全功能快速定位并修复编译错误的方法。
148 0
使用Android Studio导入Android源码:基于全志H713 AOSP,方便解决编译、编码问题
|
4月前
|
API 开发工具 Android开发
Android Studio:解决AOSP自编译framework.jar引用不到的问题
在Android Studio中解决AOSP自编译framework.jar引用问题的几种方法,包括使用相对路径、绝对路径和通过`${project.rootDir}`动态获取路径的方法,以避免硬编码路径带来的配置问题。
276 0
Android Studio:解决AOSP自编译framework.jar引用不到的问题
|
4月前
|
Android开发
我的Android 进阶修炼(1): AOSP源码根目录结构
本文介绍了AOSP源码的根目录结构,提供了基于MTK9269 Android 9.0源码的目录说明,帮助读者了解AOSP源码的组织方式和各目录的功能。
194 0
我的Android 进阶修炼(1): AOSP源码根目录结构
|
4月前
|
开发工具 Android开发 git
全志H713 Android 11 :给AOSP源码,新增一个Product
本文介绍了在全志H713 Android 11平台上新增名为myboard的产品的步骤,包括创建新的device目录、编辑配置文件、新增内核配置、记录差异列表以及编译kernel和Android系统的详细过程。
138 0
|
4月前
|
Ubuntu 开发工具 Android开发
Repo下载、编译AOSP源码:基于Ubuntu 21.04,android-12.1.0_r27
文章记录了作者在Ubuntu 21.04服务器上配置环境、下载并编译基于Android 12.1.0_r27版本的AOSP源码的过程,包括解决编译过程中遇到的问题和错误处理方法。
212 0