0%

Android 源码编译

Perpare Env

下载 repo 工具:

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

使用每月更新的初始化包

1
2
3
4
5
6
wget -c https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar # 下载初始化包
tar xf aosp-latest.tar
cd AOSP # 解压得到的 AOSP 工程目录
# 这时 ls 的话什么也看不到,因为只有一个隐藏的 .repo 目录
repo sync # 正常同步一遍即可得到完整目录
# 或 repo sync -l 仅checkout代码

初始化仓库:

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

如果提示无法连接到 gerrit.googlesource.com,请参照git-repo的帮助页面的更新一节。

如果需要某个特定的 Android 版本(列表):

master branch maybe no pass

1
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-4.0.1_r1

同步源码树(以后只需执行这条命令来同步):

1
repo sync

install dependencies for ubuntu 20.04

1
2
3
4
5
6
7
# java
sudo apt-get update
sudo apt-get install openjdk-8-jdk
# dependencies
sudo apt install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev libxml2-utils xsltproc unzip
# for Ubuntu 20
sudo apt-get install libncurses5

Build

First set Env

1
source build/envsetup.sh

select BUILD and BUILDTYPE

1
2
3
4
# method 1 : select direct
lunch aosp_arm64-eng
# method 2 :list build, and select
lunch

build

1
make -j12

Test

1
2
3
4
5
6
7
source build/envsetup.sh
lunch(选择刚才你设置的目标版本,比如这里了我选择的是2)
emulator

export ANDROID_SDK_ROOT=/home/xxx/Android/Sdk
emulator -list-avds
emulator -avd Pixel_3a_API_30 -ramdisk ramdisk.img -system system.img -data userdata.img

system.img

系统镜像,用于存储Android系统的核心文件,对应于系统的 system 目录,主要内容如下:

1
2
apex  bin         etc    framework  lib64     product     usr     xbin
app build.prop fonts lib priv-app system_ext vendor

userdata.img

用户镜像,用来存储与用户数据相关的数据

ramdisk.img

内存磁盘镜像,用于存储Linux内核启动时要装载的核心文件,对应 root 目录

vendor.img

驱动镜像,带有品牌标识和驱动的包,系统和驱动分开,方便以后升级系统

cache.img

缓存镜像,用来进行系统升级或recovery

Reference