步骤

1:下载源码

2:搭建编译环境

3:编译( 一定要等源码下载完整再编译)

硬件软件要求

官方文档:要求  |  Android 开源项目  |  Android Open Source Project

硬件要求
如果是 Android 2.3.x (Gingerbread) 及更高版本(包括 master 分支),需要使用 64 位环境。如果是较低的版本,则可以在 32 位系统中进行编译。
如果要检出代码,至少需要 250GB 可用磁盘空间;如果要进行编译,则还需要 150GB。如果要进行多次编译,则需要更多空间。
如果在虚拟机中运行 Linux,则至少需要 16GB 的 RAM/交换空间。

我装的是虚拟机Ubuntu16.0.4,根据官方的要求准备了520G,下载的是8.1的源码,编译完以后发现还有250G。多分配点空间更好以免空间不足扩容麻烦。

一、 下载源码

Android 源码是非常庞大的,而且每个模块都是用git来进行管理 ,整个Android源码是由很多个git项目构成,Google对Android代码的更新也是更新到相应模块的git项目上。

那对于需要编译Android的开发者来说,要分别clone 每个git项目而且还要放到固定的位置确实是件惨绝人寰的事,所以Google就开发了一个基于Python编写的帮助开发者管理多个项目的工具,这个工具就叫repo,repo就是封装了git命令的python脚本。

由于国内网络的原因,我们使用国内的清华大学镜像下载源码和repo工具(镜像地址:AOSP | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror)网上很多博客使用的不是最新的镜像地址会导致代码拉取失败

1:下载 repo 工具

mkdir ~/bin       # 在home下创建bin文件夹
PATH=~/bin:$PATH    # 把bin文件夹加入环境变量的
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo  #下载repo脚本
chmod a+x ~/bin/repo      #添加权限

说明:curl 根据Linux提示安装即可。或者手动输入: sudo apt install curl

2:下载git ,配置用户名邮箱

sudo apt install git

git config --global user.email "xxx.xxx"

git config --global user.name "xxx"

3:下载源码

下载源码有两种方法:

1)Android 官方下载源代码

官方文档:下载源代码  |  Android 开源项目  |  Android Open Source Project

2)使用初始化包(建议)

我第一次是使用官方的方法,一直失败,可能是网络原因文件丢失。后来都是用这个方法。

下载 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar,下载完成后记得根据 checksum.txt 的内容校验一下。

由于所有代码都是从隐藏的 .repo 目录中 checkout 出来的,所以我们只保留了 .repo 目录,下载后解压 再 repo sync 一遍即可得到完整的目录。

使用方法如下:

wget -c https://mirrors.ustc.edu.cn/aosp-monthly/aosp-latest.tar  # 下载初始化包 66G(下载失败就替换新的镜像)
tar xf aosp-latest.tar  # 66G的文件解压会比较慢 耐心等待,解压会生成aosp文件夹
cd aosp  # 解压aosp-latest.tar得到的目录
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r1  # 末尾的-b android-8.1.0_r1 用于指定具体的源码的版本,如果未指定,则用于获取master上最新的代码
repo sync  # 正常同步一遍即可得到完整目录

说明:

如果执行该命令的过程中,提示无法连接到 gerrit.googlesource.com,那么我们只需要编辑 ~/bin/repo文件,找到REPO_URL这一行,然后将其内容修改为: https://mirrors.tuna.tsinghua.edu.cn/git/git-repo (参考清华源 git-repo | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror)

(AOSP项目当前所有的分支列表:代号、标记和 Build 号  |  Android 开源项目  |  Android Open Source Project)

二、搭建编译环境

官方文档:搭建构建环境  |  Android 开源项目  |  Android Open Source Project

安装openJDK8
sudo apt  install openjdk-8-jdk

安装软件包
官方文档没有介绍Ubuntu 16.04所需的软件包。使用Ubuntu 16.04的小伙伴,需要安装下面的软件

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential  
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib 
sudo apt-get install libc6-dev-i386 
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev 
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo apt-get install lib32z-dev ccache

三、准备编译

1:设置环境

使用 envsetup.sh 脚本初始化环境。

进入源码所在目录 根据我的步骤是在aosp目录,输入如下命令

. build/envsetup.sh  # 前面的点要加上 不然提示权限被拒绝

2:选择目标

通过lunch指令设置编译目标,所谓的编译目标就是生成的镜像要运行在什么样的设备上.这里我们设置的编译目标是aosp_arm64-eng,因此执行指令:

lunch aosp_arm64-eng

编译目标格式说明
编译目标的格式:BUILD-BUILDTYPE,比如上面的aosp_arm-eng的BUILD是aosp_arm,BUILDTYPE是eng.

什么是BUILD

BUILD指的是特定功能的组合的特定名称,即表示编译出的镜像可以运行在什么环境.其中,aosp(Android Open Source Project)代表Android开源项目;arm表示系统是运行在arm架构的处理器上,arm64则是指64位arm架构;处理器,x86则表示x86架构的处理器;此外,还有一些单词代表了特定的Nexus设备,下面是常用的设备代码和编译目标,更多参考官方文档
|受型号|设备代码|编译目标|
|---|----|---|
|Nexus 6P|angler|aosp_angler-userdebug|
|Nexus 5X|bullhead|aosp_bullhead-userdebug|
|Nexus 6|shamu|aosp_shamu-userdebug|
|Nexus 5|hammerhead|aosp_hammerhead-userdebug|

提示:如果你没有Nexus设备,那么通常选择arm或者x86即可

什么是BUILDTYPE

BUILD TYPE则指的是编译类型,通常有三种:
-user:代表这是编译出的系统镜像是可以用来正式发布到市场的版本,其权限是被限制的(如,没有root权限,不鞥年dedug等)
-userdebug:在user版本的基础上开放了root权限和debug权限.
-eng:代表engineer,也就是所谓的开发工程师的版本,拥有最大的权限(root等),此外还附带了许多debug工具

了解编译目标的组成之后,我们就可以根据自己目前的情况选择了.那不知道编译目标怎么办?
我们只需要执行不带参数的lunch指令,稍后,控制台会列出所有的编译目标,输入对应的数字即可如下:

3:开始编译

通过make指令进行代码编译,该指令通过-j参数来设置参与编译的线程数量,以提高编译速度.比如这里我们设置8个线程同时编译:

make -j8

需要注意的是,参与编译的线程并不是越多越好,通常是根据你机器cup的核心来确定:core*2,即当前cpu的核心的2倍.比如,我现在的笔记本是双核四线程的,因此根据公式,最快速的编译可以make -j8.
(通过cat /proc/cpuinfo查看相关cpu信息)

如果一切顺利的化,在几个小时之后,便可以编译完成.看到### make completed successfully (03:44:37(hh:mm:ss)) ###表示你编译成功了.

参考:

自己动手编译Android源码(超详细) - 简书

编译Android系统源码相关推荐

  1. 编译Android系统源码--搭建环境

    下载Ubantu14 Google官方建议使用Ubuntu 14 下载路径 双系统安装参考 下载VMware 建议:VMware Workstation 16 Pro 下载路径 下载Android系统 ...

  2. Win10 Linux子系统编译Android系统源码

    一.前言 听说win10合入了Linux作为一个子系统,起初只以为是类似虚拟机的实现机制,想必对性能的提高也很有限.但是稍微了解却发现是并不是虚拟机的那种机制,而是可以完全发挥Host机器的性能,这无 ...

  3. Ubuntu编译Android系统源码(msm8909_android5.1.1)

    安装工具 下载Android源码需要git,repo等工具,启动repo是Google写的一个专门用于下载Android源码的工具,主要调用了git. 科普一下git与repo的区别 Git:Git是 ...

  4. 编译Android系统源码推荐的电脑配置

    工欲善其事,必先利其器. 看到很多客户,搞Android产品开发,用的电脑配置是惨不忍睹. 这些老板脑子有坑吗... ------------ 编译Android9推荐电脑配置: 处理器:酷睿i7 5 ...

  5. Android FrameWork 学习之Android 系统源码调试

    这是很久以前访问掘金的时候 无意间看到的一个关于Android的文章,作者更细心,分阶段的将学习步骤记录在自己博客中,我觉得很有用,想作为分享同时也是留下自己知识的一些欠缺收藏起来,今后做项目的时候会 ...

  6. 02 A33 Android系统源码编译

    下载源码包,解包后进入Android-SDK/tools目录. 1 先安装dtc-master和fakeroot工具. dtc-master安装方法: 解包后,在源码目录下: make &&a ...

  7. Android系统源码编译环境搭建(清华镜像,想编译什么版本都可以,只是有JDK和make的版本要求)

    上一次,写得有点匆忙,现在补上清华镜像源码的详细下载方法. 编译Android 5.1源代码并烧录到Nexus4(用的是清华镜像的源) 环境准备: 基本环境:ubuntu-14.04-desktop- ...

  8. ubuntu-18.04.4 Android系统源码TP1A(Android 13)下载及编译

    继上一篇博客介绍了VMware Workstation15 配置ubuntu-18.04.4,这篇主要介绍安装后环境搭建,Android源码的下载与编译.小编当前下载的是当前最新的代码,是主干分支代码 ...

  9. android系统源码7.1.2_r8下载,编译,运行到nexus5X上,修改源码并编译SDK进行测试

    一,学习android系统源码下载,编译的作用 1,可以自己 DIY 自己的rom系统,从系统层面,宏观的加深理解 android系统 2,编译自己的 userdebug(原生root权限) rom, ...

  10. Android FrameWork学习(二)Android系统源码调试

    点击打开链接 通过上一篇 Android FrameWork学习(一)Android 7.0系统源码下载\编译 我们了解了如何进行系统源码的下载和编译工作. 为了更进一步地学习跟研究 Android ...

最新文章

  1. Redis 数据类型介绍
  2. 工业用微型计算机(6)-指令系统(3)
  3. leetcode 476. 数字的补数(Java版)| How to extract ‘k’ bits from a given position in a number
  4. Ubuntu10.04No init found. Try passing init= bootarg解决方案
  5. 金山网络CEO傅盛:简约之美
  6. 人工智能语言python实验报告_【报名】人工智能语言Python启蒙课程(五六年级)...
  7. 【Flink】ExceptionInChainedOperatorException: Could not forward element to next operator Buffer
  8. Pytorch:手动求导和autograd的计算对比
  9. 寻找自己的道路——与技术同胞共勉 一种划分为七个阶段的道路:自信=意志=布局=切入点=团队=渠道=产品...
  10. Win10安装和配置IIS web服务器环境来运行ASP(动态服务器页面)脚本
  11. 脱机外挂制作完全版(制作原理与实现技术)
  12. OneNote同步问题,提示没有权限
  13. vsual studio 如何关闭禁止mscorsvw.exe (转)
  14. 网站在线视频播放实现
  15. MATLAB模拟陀螺仪的运动轨迹(附完整代码)
  16. 数据库连接10060_Navicat MySQL 数据库连接报:10060 “Unknow error” 错误 – DEFCON笔记...
  17. 业务实战记录(1):帮业务人员做道Excel题
  18. 内网终端管理:独立或统一管理都将大行其道
  19. 服务器显示器如何更换,笔记本怎么换显示器_笔记本换显示器教程-win7之家
  20. 机器人运动学仿真笔记

热门文章

  1. Android刷机Windows10,蓝魔i9s Win10+Android双系统的刷机教程及固件下载
  2. Polycom高清视频会议桌面系统HDX 4000
  3. java swing 飞机大战游戏 github 免费 开源 公开 源码
  4. Fiddler使用过程中无法抓取https的解决方法
  5. Matlab实现光栅实验
  6. python简明教程_04
  7. Python——程序设计方法
  8. 直播网站源码,输入框中显示小图标
  9. 页面局部ajax文件上传,页面通过ajax实现文件上传功能
  10. 商城口碑高的蓝牙耳机好用吗?十大高人气蓝牙耳机测评推荐