从0开始编译Android源码

226 阅读2分钟

1.环境准备

1.1 虚拟机环境及配置

  • CPU:i7-13700
  • 电脑内存:32G
  • 虚拟机:Ubuntu16.04
  • 虚拟机硬盘:500G(不要少于300G)
  • aosp版本:安卓8.1

1.2 运行环境配置

编译环境准备参考:source.android.com/source/init…

  1. java环境:openjdk8
  sudo apt-get install openjdk-8-jdk

安装后使用命令查看java版本

java -version

安装成功后会有如下显示

xxx@ubuntu:~$ java -version
openjdk version "1.8.0_292"
OpenJDK Runtime Environment (build 1.8.0_292-8u292-b10-0ubuntu1~16.04.1-b10)
OpenJDK 64-Bit Server VM (build 25.292-b10, mixed mode)
  1. 安装需要的软件包
sudo apt-get 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

3.安装Repo Android 项目使用Repo工具管理,下载Android源码需要使用repo

//安装repo
sudo apt-get update 
sudo apt-get install repo
//检查repo是否安装成功
repo version

如果有如下输出则证明安装成功:

ubuntu:~$ repo version
<repo not installed>
repo launcher version 2.45

2.源码下载

源码下载主要有两种方式:

  1. 使用repo下载
  2. 下载清华镜像每月更新的初始化包

2.1 repo下载

如果能够访问google可以从googlesource下载

//创建一个文件夹存放源码,如aosp
mkdir aosp
cd aosp
使用-b参数进行指定分支
$ repo init -b android-8.1.0_r1 -u https://android.googlesource.com/platform/manifest
//同步源码,-j表示线程数
repo sync -c --no-tags -j8

无法访问google可以使用国内的镜像源:

repo init -u https://aosp.tuna.tsinghua.edu.cn//platform/manifest -b android-8.1.0_r1

2.2 使用每月更新的初始化包

安装包下载地址:mirrors.tuna.tsinghua.edu.cn/aosp-monthl… 下载完成后解压并同步一次最新代码:

//解压代码
tar xf aosp-latest.tar
cd AOSP  //解压后得到的 AOSP 工程目录
//此时目录里面是空的,只有一个隐藏的 .repo 目录
repo sync//同步一遍即可得到完整目录

3.源码编译

3.1 初始化编译环境

首先要执行envsetup.sh脚本,其中记录着编译过程中所需的各种函数实现

source ./build/envsetup.sh

其次选择要编译的cpu架构:输入launch,选择6(在模拟器上运行)

@ubuntu:~/Downloads/android-8.1.0_r1$ lunch

You're building on Linux

Lunch menu... pick a combo:
     1. aosp_arm-eng
     2. aosp_arm64-eng
     3. aosp_mips-eng
     4. aosp_mips64-eng
     5. aosp_x86-eng
     6. aosp_x86_64-eng
     7. full_fugu-userdebug
     8. aosp_fugu-userdebug
     9. aosp_car_emu_arm-userdebug
     10. aosp_car_emu_arm64-userdebug
     11. aosp_car_emu_x86-userdebug
     12. aosp_car_emu_x86_64-userdebug
     13. mini_emulator_arm64-userdebug
     14. m_e_arm-userdebug
     15. m_e_mips64-eng
     16. m_e_mips-userdebug
     17. mini_emulator_x86_64-userdebug
     18. mini_emulator_x86-userdebug
     19. uml-userdebug
     20. aosp_dragon-userdebug
     21. aosp_dragon-eng
     22. aosp_marlin-userdebug
     23. aosp_marlin_svelte-userdebug
     24. aosp_sailfish-userdebug
     25. aosp_walleye-userdebug
     26. aosp_walleye_test-userdebug
     27. aosp_taimen-userdebug
     28. aosp_angler-userdebug
     29. aosp_bullhead-userdebug
     30. aosp_bullhead_svelte-userdebug
     31. hikey-userdebug
     32. hikey960-userdebug

Which would you like? [aosp_arm-eng] 6

输入make开始正式编译,-j参数表示用多少个线程,一般用两倍的cpu核数

make -j9 

编译时间根据设备的性能而定,编译成功后会有如下输出

#### build completed successfully (01:07 (mm:ss)) ####

输入emulator即可启动模拟器