下载,编译 AOSP

2023-05-27  本文已影响0人  梧叶已秋声

首先,请先确保本机配置好git。

1.下载 repo 工具

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo> ~/bin/repo
chmod a+x ~/bin/repo

2. 建立工作目录

可以在任何地方(保证权限的前提下)建立一个任意名称的工作目录,此处命名为 android

mkdir android
cd android

3. 修改repo内镜像地址

打开~/bin/repo,修改REPO_URL,改为'https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

image.png

4.初始化仓库

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

默认是default,使用的是master.

执行 repo manifest 可查看当前manifest

image.png
如需下载其他分支,可在manifest目录下查看。

https://android.googlesource.com/platform/manifest

然后加上 -b android-xxx 。例如:

repo init -u <https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest> -b android-13.0.0_r49

5. 同步代码

repo sync -j4

由于 AOSP 镜像造成CPU/内存负载过重,限制了并发数量,因此建议:

  1. sync的时候并发数不宜太高,否则会出现 503 错误,即j后面的数字不能太大,建议选择4。
  2. 请尽量选择流量较小时错峰同步。

同步完后,创建并切换到本地master分支

repo start master --all

6.安装基础编译环境


# Google原生Android源码编译依赖库
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
# 安装openjdk
sudo apt-get install openjdk-11-jdk

7.编译

加载环境变量,并lunch。

source build/envsetup.sh
lunch 
image.png

没有设备不用烧录的话,就随便选一个,例如2,也可以自定义其他的,例如 aosp_arm64-userdebug。

然后执行make 编译,并输出编译log。

make -j24 2>&1 | tee build.java

8. AOSP切分支

AOSP使用Repo + git 管理,manifest 配置了git仓位置,切分支之前要先切换manifest。

8.1 切换manifest

进入 .repo/manifests

cd .repo/manifests
image.png

建立本地分支,并关联到远程分支。

git checkout -b android13 origin/android-13.0.0_r49

这里由于我不会涉及到push,所以分支名就随便一点了.
实际使用中,本地分支名最好保持跟远程分支名一致.

image.png

repo manifest 查看当前manifest,可以看到revision发生了改变,之前是master。


image.png

8.2 创建本地分支,切换,同步

repo start android13_r49 --all
repo sync

这样分支就切换好了。

可以使用 repo branch 查看。

8.3 其他注意点

切了manifest之后,由于git仓配置不一样,可能会导致下面这种情况出现,即当前manifest下,Git 仓库中不存在指定的分支:

image.png
使用git branch -D删除分支 会出现skipping
repo forall -c git branch -D  android13_r49
repo forall -c git branch -D  master

如果在执行 repo forall -c git branch -D <branch> 命令时出现 skipping 提示,这通常意味着 Git 仓库中不存在指定的分支。如果分支存在于某个 Git 仓库中,但是在其他 Git 仓库中不存在,那么 repo forall 命令会跳过那些不存在该分支的 Git 仓库,并显示 skipping 提示。

如果想要删除 android13_r49 分支,可以使用以下命令:

repo abandon android13_r49

执行此命令后,repo 会将 android13_r49 分支标记为废弃,并从所有 Git 仓库中删除该分支。

尽量确保所有代码在一个branch中。


image.png

如果修改太多,要批量撤销所有修改,可以使用以下命令:

repo forall -c git reset --hard

执行此命令后,repo 会遍历所有 Git 仓库,并在每个仓库中执行 git reset --hard 命令来撤销所有未提交的更改。

有时候,还会遇到 头指针分离 的情况(例如manifest新增了代码仓配置)。

repo branch 可以看到,代码仓没有全部在一个分支上。

image.png
image.png
进入不在分支的仓库, git branch ,显示头指针分离。

这种情况表示您当前不在任何分支上,而是直接在某个提交上进行工作。这被称为“头指针分离”。

这里可以使用repo切的master分支,也可以用git 切换分支。

image.png
参考链接:
Android 镜像使用帮助
Android Platform Manifest
清华 AOSP 镜像源配置笔记
Android 13源码下载及编译
【android Framework 探究】android 13 aosp 全记录 - 编译
上一篇 下一篇

猜你喜欢

热点阅读