Ubuntu 24.04 Android AOSP 16环境搭建

73 阅读3分钟

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

选择稳定的分支

  1. 国内清华源:
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

编译

  1. 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处的操作

  1. 导入项目 打开 Android Studio,选择 File -> Open,导入源码根目录下生成的 android.ipr 文件。首次打开加载时间较长,请耐心等待。 androidstudio设置转存失败,建议直接上传图片文件

  2. 解决跳转到 .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