环境:
Android13源码下载和构建之后会占用接近300G空间,构建多个版本会占用更多,
16GB及以上内存,32GB及以上swap空间,否则编译初期容易OOM,导致终端闪退
ArchLinux: 6.2.13-arch1-1 (64-bit)
JAVA:openjdk version "9"
PYTHON: Python 3.11.5
----------
i5双核
16G内存
32GB的Swap空间
1T硬盘
注意:若需要编译源码刷机,需要先确定要刷的手机支持的aosp版本,参考
aosp下载、编译、刷机和单编framework(android 12)
android-10.0.0_r47之下载、编译、运行
已不建议直接下载压缩包,建议直接使用repo更新,原因是多数系统python已被升级成了python3,python2被完全移除。而清华镜像压缩包里面的repo还是python2时候创建的,会引起各种初始化异常
1. 下载初始化包,约60G:https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar
2. 解压预下载包,解压出aosp目录,只有隐藏文件夹.repo
tar xf aosp-latest.tar
- 创建目录,初始化仓库
查看android版本号
mkdir aosp
cd aosp
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r47
- 指定版本,同步代码
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-10.0.0_r47
repo sync
若失败则重新执行,sync支持断点
repo sync --fail-fast
也可以用脚本执行同步
touch repo.sh
vim repo.sh
chmod a+x repo.sh
./repo.sh
脚本:
#!/bin/bashrepo sync -j4while [ $? -ne 0 ]doecho "======sync failed ,re-sync again======"sleep 3repo sync -j4done
- 查看分支,获取同步版本名
cd .repo/manifests
git branch -a
- 在aosp目录选择需要同步的版本
cd ~/aosp
repo init -b android-10.0.0_r47
repo sync -c # 只同步当前分支,得到完整目录
repo start android-10.0.0_r47_dev --all # 创建分支用于开发
- 初始化编译环境
注意 若也是编译android10,为了编译顺利,建议线去看AOSP编译问题,提前做好设置
source build/envsetup.sh
- 删除上一次编译的结果,初次编译可以不需要这一步
make clobber
- 根据列表,选择与设备对应的编译版本
编译Android13时,要需要用模拟器运行,要使用
lunch sdk_x86_64-userdebug,否则不会生成userdata-qemu.img,无法启动模拟器
lunch列表中没有 sdk_x86_64-userdebug
# lunch sdk_x86_64-userdebug # android13
lunch aosp_x86_64-eng # android10 可用此命令
- 开始编译,编译需要十几个小时
make
- 模拟器运行
emulator
- 关闭模拟器
pkill qemu #关闭模拟器
- 若需要重新编译system.img
Android比较重要的三个img文件:
make systemimage #system.imgmake userdataimage #userdata.imgmake ramdisk #ramdisk.imgmake snod #快速打包system.img (with this command, it will build a new system.img very quickly. well, you cannot use “make snod” for all the situations. it would not check the dependences. if you change some code in the framework which will effect other applications)
#source build/envsetup.sh
#lunch 对应的编译版本
make systemimage
- 重新编译某个模块
mmm frameworks/base/services
若提示no such file or directory: frameworks/base/services,用下面命令
cd frameworks/base/services
mmm .
- 编译SDK
注意: 每次执行make命令,都会先清空out目录,所以先备份一下之前make处来的out目录下的文件,再make sdk
直接执行make是不包括make sdk的。make sdk用来生成SDK,这样,我们就可以用与源码同步的SDK来开发android。
# 重新拉取生成SDK的一些工具
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -g all,-notdefault,tools
repo sync
source build/envsetup.shlunch sdk_x86_64-eng
# or
#lunch sdk_x86_64-userdebug
# or
#lunch sdk_x86_64-usermake sdk
下载AOSP源码编译、调试、刷机
AOSP 源码整编单编
Android源码编译SDK
内核源码
选择版本,goldfish是虚拟机使用
$ git clone https://aosp.tuna.tsinghua.edu.cn/kernel/goldfish.git
# $ git clone https://android.googlesource.com/kernel/goldfish.git #太慢# goldfish 项目包含适用于所模拟的平台的内核源代码。
# msm 项目包含适用于 ADP1、ADP2、Nexus One、Nexus 4、Nexus 5、Nexus 6、Nexus 5X、Nexus 6P、Nexus 7 (2013)、Pixel 和 Pixel XL 的源代码,可用作使用 Qualcomm MSM 芯片组的起点。
# omap 项目用于 PandaBoard 和 Galaxy Nexus,可用作使用 TI OMAP 芯片组的起点。
# samsung 项目用于 Nexus S,可用作使用 Samsung Hummingbird 芯片组的起点。
# tegra 项目用于 Xoom、Nexus 7 (2012)、Nexus 9,可用作使用 NVIDIA Tegra 芯片组的起点。
# exynos 项目包含适用于 Nexus 10 的内核源代码,可用作使用 Samsung Exynos 芯片组的起点。
# x86_64 项目包含适用于 Nexus Player 的内核源代码,可用作使用 Intel x86_64 芯片组的起点。
# hikey-linaro 项目用于 HiKey 参考板,可用作使用 HiSilicon 620 芯片组的起点。$ git branch -a # 查看分支
# 切换对应分支
$ git checkout -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29
编译报错
AOSP编译问题
AIDEGen + Android Studio 查看和修改系统源码
去 google 官方下载 Android Studio,并将其放到 /opt 目录下。
接下来,选择我们的目标 Product:
source build/envsetup.sh
lunch aosp_x86_64-eng
做好以上准备工作后,我们就可以打开系统模块了,这里我们以 Settings 为例:
Settings 更换为其他模块名或是模块存在的路径即可打开其他模块
aidegen Settings -i s -s # -i 表示使用ide,s 表示 Android Studio ,-s 表示跳过编译
Android 系统开发工具推荐
使用 AIDEGen 将 AOSP 项目导入 Android Studio
切换manifest分支,即android版本分支
当前分支为android-5.1.1_r15,需要切换为android-5.1.1_r26 (仍然使用中科大的镜像源)
cd .repo/manifests
git branch -a | grep android- | cut -d / -f 3
git branch -a | cut -d / -f 3 # 获取分支名repo init -b android-5.1.1_r26
repo sync -c
一篇通俗易懂的repo教程
repo 操作命令
切换源
修改aosp/.repo/manifests.git/config文件下面位置
[remote "origin"]# 清华地址#url = http://aosp.tuna.tsinghua.edu.cn/platform/manifest# 科大地址url = git://mirrors.ustc.edu.cn/aosp/platform/manifest fetch = +refs/heads/*:refs/remotes/origin/*
[manifest]
Cuttlefish:新一代云端 Android 模拟器
运行前,要安装CuttleFish所需的依赖,Arch linux使用 yay -S cuttlefish-user-git 来安装即可。
下载镜像运行
编译AOSP运行
其他
使用Android Studio导入AOSP源码的奇技淫巧
Android 镜像使用帮助
repo和Git的关系
repo的实际使用
Android init启动流程初识(基于Android10源码分析)
SystemServer启动解析
优化
Android Profiler(一)CPU Profiler
Android Profiler(二)Memory Profiler
Android Profiler之CPU
Shallow Size和Retained Size详解
LeakCanary 与内存泄漏定位