1、环境配置

  • Ubuntu18.04
  • openJDK1.8
  • Python2.7

2、更新Ubuntu镜像源

编辑/etc/apt/source.list,替换为以下内容

deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse # deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
# deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

然后执行

sudo apt-get udpate

3、安装相关依赖

3.1 安装Java

sudo apt-get install openjdk-8-jdk

3.2 安装Python

sudo apt-get install python2.7

3.3 安装其它依赖

sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig

参考:

构建依赖

各个Ubuntu版本需要安装的包

4、配置Git

git config --global user.name "Your Name"
git config --global user.email "you@example.com"

5、下载Repo

5.1 配置Repo下载路径

编辑你的~/.bashrc文件,追加如下内容,表示将从该地址下载Repo工具

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'

然后重启终端。

5.2 下载Repo

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

参考:

Repo初始化流程

Repo下载地址配置

这些命令执行完成将在当前用户的家目录生成一个bin目录,该目录下面放着一个repo可执行文件。它便是Repo工具,其实就是一个Python脚本。同时将该脚本临时加入了PATH环境变量,如果你想将其永久加入环境变量,可以修改/etc/profile文件。

6、选择源码版本

这一步很关键,需要找到支持你的设备的源码版本,还要考虑该版本是否有对应版本的驱动文件。我的设备是Nexus 5x,想编译Android7.1.2,所以选择这个版本的源码:



N2G47Z这个Build id可以用于后面选择驱动文件。



参考:

源码版本

驱动文件版本

7、下载源码

7.1 下载manifest仓库

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-7.1.2_r18

这条指令执行后,首先会在当前目录生成一个.repo目录,然后下载一个叫manifests的git仓库,该仓库会记录当前分支的Android源码都需要下载哪些仓库及其下载地址,分支信息等(Android源码是由多个仓库组成的)。

repo init通过-b指定分支,如果不指定,那就是主分支。

7.2 开始下载源码

执行repo sync便开始下载源码

repo sync

8、下载驱动文件

根据第六步的源码的Build Id找到驱动二进制文件,下载到源码根目录下面,解压执行,然后阅读证书内容,一路同意,注意最后要输入I ACCEPT

wget https://dl.google.com/dl/android/aosp/lge-bullhead-n2g47z-77c6c4f0.tgz
tar -xvf xxx.tgz
./xxx.tgz wget https://dl.google.com/dl/android/aosp/qcom-bullhead-n2g47z-bad42411.tgz
tar -xvf yyy.tgz
./yyy.tgz

最后会在vendor目录下生成一些文件。

9、编译源码

下载完成后,代码会被自动checkout出来,然后执行如下命令进行编译

source build/envsetup.sh
lunch aosp_bullhead-userdebug
make -j 16

我的设备是Nexus5x,所以选择aosp_bullhead-userdebug,具体设备要参考设备代号

10、刷机

编译完成后,会在out/target/product/bullhead/目录生成相应的镜像文件,我们只需要在源码根目录执行下面的命令进行刷机即可

adb reboot bootloader //手机重启进入bootloader模式
fastboot flashall -w //刷写镜像

遇到的问题

repo下载时报安全证书校验类似的错误

git config --global http.sslverify false

编译报错(具体忘了什么错了)

编辑~/.bashrc增加环境变量

export LC_ALL=C

Android7.1.2 源码编译并烧写Nexus5X的更多相关文章

  1. Android 源码编译之旅

    目录 前言 背景 安装软件 正文 Mac 分区 移动硬盘分区 Repo 下载源码 编译 源码导入 Android Studio 查看 碰到的问题 Could not find a supported ...

  2. xposed源码编译与集成

    xposed installer3.0版本之后,传统的xposed框架的使用方法是从官网上下载xposed installer.apk以及xposed-arm-sdk22.zip包.然后具体的使用方法 ...

  3. Android 5.0源码编译问题

    如果是自己通过repo和git直接从google官网上download的源码,请忽略这个问题,但是由于google在国内被限制登录,通过这一种方法不是每个人都能download下来源码,通常的做法就是 ...

  4. Android stdio Apktool源码编译

    Android Apktool源码编译 标签(空格分隔): Android Apktool 源码编译 需求 习惯NetBeans调试smali需要用Apktool反编译apk,需要用-d的参数才能生成 ...

  5. SSH/SSL 源码编译安装简易操作说明

    环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复: 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版本(实测不删除旧版本某盟扫描无法通过). 当 ...

  6. Hadoop源码编译过程

    一.           为什么要编译Hadoop源码 Hadoop是使用Java语言开发的,但是有一些需求和操作并不适合使用java,所以就引入了本地库(Native Libraries)的概念,通 ...

  7. World Wind .NET源码编译问题处理

    World  Wind  .NET源码编译问题处理 下载了World_Wind_1.4.0_Source源码(http://worldwindcentral.com/wiki/NASA_World_W ...

  8. 源码编译安装 MySQL 5.5.x 实践

    1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...

  9. Linux 安装node.js ---- 源码编译的方式

    一 : 普通用户: 安装前准备环境: 1.检查Linux 版本 命令: cat /etc/redhat-release 2.检查 gcc.gcc-c++ 是否安装过 命令: rpm -q gcc rp ...

随机推荐

  1. 在一个元素上:hover,改变另一个元素的css属性

    如果二者是父子关系,可以写成这种: .face:hover .eye-bottom { margin-top: 30px; } 如果是兄弟关系: .face:hover+.ear-wrap { tra ...

  2. linux系统引导过程

    linux系统引导过程 linux-0.11引导时,将依次运行BIOS程序.bootsect.s.setup.s和head.s,完成引导过程后进入到main函数运行.BIOS完成硬件的检查与初始化等工 ...

  3. idea 启动微服务 设置 run dashboard

    微服务如果很多,启动时如果在run窗口,会不是很方便,所以idea中配置了rundashboard,有时不自动出现时,需要进行配置: 配置操作如下: 我的idea版本2020.2 1.在父工程的.id ...

  4. Hive启动后show tables报错:Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient

    错误详情: FAILED: HiveException java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive ...

  5. java重载时自动转换咋回事?举例说明

    当一个重载的方法被调用时,Java在调用方法的参数和方法的自变量之间寻找匹配.    但是,这种匹配并不总是精确的.只有在找不到精确匹配时,Java的自动转换才会起作用. (如果定义了test(int ...

  6. Redis 未授权访问漏洞【原理扫描】修复方法

    漏洞类型 主机漏洞 漏洞名称/检查项 Redis 配置不当可直接导致服务器被控制[原理扫描] 漏洞名称/检查项 Redis 未授权访问漏洞[原理扫描] 加固建议 防止这个漏洞需要修复以下三处问题 第一 ...

  7. Mysql学习day2随笔

    --jion on 连接查询 --jion where 等值查询 建议先用jion on再用where过滤 --inner jion 返回交集 --left join 无论右表是否匹配,都会从左表返回 ...

  8. OpenHarmony 3.1 Beta版本关键特性解析——HAP包安装实现剖析

    ​(以下内容来自开发者分享,不代表 OpenHarmony 项目群工作委员会观点)​ 石磊 随着社会的不断发展,人们逐渐注重更加高效.舒适.便捷.有趣的生活和工作体验. OpenAtom OpenHa ...

  9. Promql基础语法2

    数据样本 直方图类型 delta函数 运算操作 数学运算 node_disk_info / 100 当瞬时向量与标量之间进行数学运算时,数学运算符会依次作用域瞬时向量中的每一个样本值,从而得到一组新的 ...

  10. XCTF练习题---MISC---a_good_idea

    XCTF练习题---MISC---a_good_idea flag:NCTF{m1sc_1s_very_funny!!!} 解题步骤: 1.观察题目,下载附件 2.到手以后发现是一张图片,尝试修改文件 ...