Ubuntu 24.04 Android AOSP 16环境搭建
硬件要求
编译环境: Ubuntu24.04 aosp版本为android-16.0.0_r2 电脑内存:建议大于32G
前置电脑必要软件安装
sudo apt-get update
sudo apt install openssh-server
安装必要依赖
sudo apt-get install -y \
git subversion gnupg flex bison gperf \
build-essential zip curl \
libc6-dev \
libncurses-dev \
x11proto-core-dev \
libx11-dev \
libreadline-dev \
libgl1-mesa-dev \
g++-multilib \
mingw-w64 \
tofrodos \
python3-markdown \
libxml2-utils xsltproc \
zlib1g-dev \
libxext-dev \
u-boot-tools \
ccache libssl-dev \
libncurses5-dev \
libswitch-perl \
aapt \
libelf-dev dwarves \
openjdk-11-jdk && \
wget -q -O /tmp/libtinfo5.deb http://archive.ubuntu.com/ubuntu/pool/universe/n/ncurses/libtinfo5_6.2-0ubuntu2_amd64.deb && \
wget -q -O /tmp/libncurses5.deb http://archive.ubuntu.com/ubuntu/pool/universe/n/ncurses/libncurses5_6.2-0ubuntu2_amd64.deb && \
sudo dpkg -i /tmp/libtinfo5.deb && \
sudo dpkg -i /tmp/libncurses5.deb && \
echo "✅ 全部安装完成!"
增加swap
实测android 16编译内存需要64G,如果内存是32G的话,建议增加swap
sudo swapoff /swap.img 2>/dev/null; sudo rm -f /swap.img && (sudo fallocate -l 64G /swap.img || sudo dd if=/dev/zero of=/swap.img bs=1G count=64 status=progress) && sudo chmod 0600 /swap.img && sudo mkswap /swap.img && sudo swapon /swap.img && swapon --show && free -h
安装repo (如果无法连谷歌网需要做)
# 手动安装repo
#sudo mkdir -p /usr/local/bin
sudo curl -L https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o /usr/local/bin/repo
sudo chmod a+x /usr/local/bin/repo
# 可以在 ~/.bashrc 中指定 repo 工具去清华镜像拉取清单(manifest)和代码
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
export REPO_REMOTE='tuna'
安装samba (可选)
sudo apt-get install samba samba-common
sudo smbpasswd -a xxx
添加共享文件夹
sudo vim /etc/samba/smb.conf
[share]
comment = share folder
browseable = yes
path = "YourHome"
valid users = "YourName"
force user = "YourName"
force group = "YourName"
public = yes
available = yes
writable = yes
sudo systemctl restart smbd.service
下载aosp源码android-16.0.0_r2
选择稳定的分支
- 国内清华源:
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-16.0.0_r2
repo sync
2. 国内中科大源
repo init -u https://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-16.0.0_r2
repo sync
3. 谷歌源:
repo init -u https://android.googlesource.com/platform/manifest -b android-16.0.0_r2
repo sync
如果不需要查看Git记录,只要最新的代码,可以命令带上--depth=1
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-16.0.0_r2 --depth=1
repo sync
编译
- AAOS
source build/envsetup.sh
lunch sdk_car_x86_64-bp2a-eng #这个最重要的目标
make
2. phone
source build/envsetup.sh
lunch sdk_phone64_x86_64-bp2a-userdebug
两个查看命令
$ ls build/release/release_configs/
ap2a.textproto ap4a.textproto bp2a.textproto root.textproto user.textproto
ap3a.textproto bp1a.textproto eng.textproto userdebug.textproto
$ cat device/generic/goldfish/AndroidProducts.mk
PRODUCT_MAKEFILES := \
$(LOCAL_DIR)/64bitonly/product/sdk_phone64_x86_64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_phone16k_x86_64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_phone64_x86_64_minigbm.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_phone64_x86_64_riscv64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_tablet_arm64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_tablet_x86_64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_phone64_arm64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_phone64_arm64_minigbm.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_phone16k_arm64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_phone64_arm64_riscv64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_slim_x86_64.mk \
$(LOCAL_DIR)/64bitonly/product/sdk_slim_arm64.mk \
$(LOCAL_DIR)/fvpbase/fvp.mk \
$(LOCAL_DIR)/fvpbase/fvp_mini.mk
启动模拟器
emulator
androidstudio导入framework java源码
做完source lunch
# 1. 编译 idegen 模块
mmm development/tools/idegen/
# 2. 执行脚本生成 android.ipr 和 android.iml 文件
development/tools/idegen/idegen.sh
生成android.iml和android.ipr
减少加载难度,修改android.iml只开放framework/core下的代码
<content url="file://$MODULE_DIR$">
<!-- 保留 Framework 核心源码 -->
<sourceFolder url="file://$MODULE_DIR$/frameworks/base/core/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/frameworks/base/services/java" isTestSource="false" />
<!-- 排除所有非必要目录 -->
<excludeFolder url="file://$MODULE_DIR$/art" />
<excludeFolder url="file://$MODULE_DIR$/bionic" />
<excludeFolder url="file://$MODULE_DIR$/bootable" />
<excludeFolder url="file://$MODULE_DIR$/build" />
<excludeFolder url="file://$MODULE_DIR$/cts" />
<excludeFolder url="file://$MODULE_DIR$/dalvik" />
<excludeFolder url="file://$MODULE_DIR$/developers" />
<excludeFolder url="file://$MODULE_DIR$/development" />
<excludeFolder url="file://$MODULE_DIR$/device" />
<excludeFolder url="file://$MODULE_DIR$/docs" />
<excludeFolder url="file://$MODULE_DIR$/external" />
<excludeFolder url="file://$MODULE_DIR$/hardware" />
<excludeFolder url="file://$MODULE_DIR$/kernel" />
<excludeFolder url="file://$MODULE_DIR$/libcore" />
<excludeFolder url="file://$MODULE_DIR$/libnativehelper" />
<excludeFolder url="file://$MODULE_DIR$/out" />
<excludeFolder url="file://$MODULE_DIR$/pdk" />
<excludeFolder url="file://$MODULE_DIR$/platform_testing" />
<excludeFolder url="file://$MODULE_DIR$/prebuilts" />
<excludeFolder url="file://$MODULE_DIR$/sdk" />
<excludeFolder url="file://$MODULE_DIR$/system" />
<excludeFolder url="file://$MODULE_DIR$/test" />
<excludeFolder url="file://$MODULE_DIR$/toolchain" />
<excludeFolder url="file://$MODULE_DIR$/tools" />
<excludeFolder url="file://$MODULE_DIR$/vendor" />
</content>
androidstudio处的操作
-
导入项目 打开 Android Studio,选择 File -> Open,导入源码根目录下生成的 android.ipr 文件。首次打开加载时间较长,请耐心等待。

-
解决跳转到 .class 文件的问题(核心) 为了防止点击类名时跳转到 android.jar 的 .class 文件,而不是本地的 .java 源码:
进入 File -> Project Structure -> Modules。 选中 android 模块,切换到 Dependencies 标签页。 将包含本地源码的目录(如 frameworks)移动到依赖列表的最顶部。 删除或取消勾选 Dependencies 列表中多余的、包含重复类的 .jar 包依赖。
常用跳转快捷键速查
跳转到定义:Ctrl + 鼠标左键 (Mac: Cmd + 鼠标左键)
查看接口实现类:Ctrl + Alt + B
快速查看源码(不跳转):Ctrl + Shift + I
查看当前类的方法列表:Ctrl + F12
全局搜索文件/类:双击 Shift