首先,请先确保本机配置好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'
4.初始化仓库
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
默认是default,使用的是master.
执行 repo manifest
可查看当前manifest
。
如需下载其他分支,可在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/内存负载过重,限制了并发数量,因此建议:
- sync的时候并发数不宜太高,否则会出现 503 错误,即
j
后面的数字不能太大,建议选择4。 - 请尽量选择流量较小时错峰同步。
同步完后,创建并切换到本地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,所以分支名就随便一点了.
实际使用中,本地分支名最好保持跟远程分支名一致.
repo manifest 查看当前manifest,可以看到revision发生了改变,之前是master。
image.png
8.2 创建本地分支,切换,同步
repo start android13_r49 --all
repo sync
这样分支就切换好了。
可以使用 repo branch 查看。
8.3 其他注意点
切了manifest之后,由于git仓配置不一样,可能会导致下面这种情况出现,即当前manifest下,Git 仓库中不存在指定的分支:
使用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
进入不在分支的仓库,
git branch
,显示头指针分离。
这种情况表示您当前不在任何分支上,而是直接在某个提交上进行工作。这被称为“头指针分离”。
这里可以使用repo切的master分支,也可以用git 切换分支。
参考链接:
Android 镜像使用帮助
Android Platform Manifest
清华 AOSP 镜像源配置笔记
Android 13源码下载及编译
【android Framework 探究】android 13 aosp 全记录 - 编译
网友评论