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. 技术架构:IT生存之道

    Technical architecture: What IT does for a living (cio.com) Technical architecture: What IT does for ...

  2. canvas离屏、旋转效果实践——旋转的雪花

    效果展示理论基础--"常见的canvas优化--模糊问题.旋转效果" 用离屏canvas画基础部分 1.封装画线函数 function drawLine(ctx,x1,y1,x2, ...

  3. React 可视化开发工具 Shadow Widget 非正经入门(之六:markdown)

    本系列博文从 Shadow Widget 作者的视角,解释该框架的设计要点.本篇讲解 Markdown 在 Shadow Widget 中的应用. Markdown 在 Shadow Widget 中 ...

  4. java中throws子句是怎么用的?工作原理是什么

    7.throws子句 马克-to-win:当你的方法里抛出了checked异常,如你不catch,代表你当时不处理(不想处理或没条件处理),但你必须得通过"throws那个异常"告 ...

  5. js读取cookie 根据cookie名称获取值的方法

    //方法1 //存在问题:如果cookie中存在 aaaname=aa;name=bb 获取name的值就会出现错误function getCookie(c_name){ if (document.c ...

  6. npm权限不够(安装什么都报错)

    问题 Windows下使用npm安装任何包都报错, Windows下使用npm显示权限不够 如图: 解决方法    1. 方法一    使用管理员权限打开 命令窗口,  治标不治本!!!!不推荐    ...

  7. hql常用查询语句

    // HQL: Hibernate Query Language.// 特点:// >> 1,与SQL相似,SQL中的语法基本上都可以直接使用.// >> 2,SQL查询的是表 ...

  8. Linux上安装RePlace

    RePlAce: Advancing Solution Quality and Routability Validation in Global Placement 项目地址 https://gith ...

  9. FastAPI(七十二)实战开发《在线课程学习系统》接口开发-- 留言列表开发

    之前我们分享了FastAPI(七十一)实战开发<在线课程学习系统>接口开发-- 查看留言,这次我们分享留言列表开发. 列表获取,也需要登录,根据登录用户来获取对应的留言.逻辑梳理如下. 1 ...

  10. 省掉80%配置时间,这款Mock神器免费又好用

    前端的痛苦 作为前端,最痛苦的是什么时候? 每个迭代,需求文档跟设计稿都出来了,静态页面唰唰两天就做完了.可是做前端又不是简单地把后端吐出来的数据放到页面上就完了,还有各种前端处理逻辑啊. 后端接口还 ...