nexus6p手机编译,烧写记录

一,下载源码

1,环境

  >ubantu  16.04

  >nexus6p

  >git  repo  

  >可以翻墙的网络

  >大于100G的硬盘

2,安装软件

  >安装git

sudo apt-get install git 

  >安装repo

   1,首先创建bin文件夹

 mkdir ~/bin
 PATH=~/bin:$PATH

    2,下载repo工具  

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

    3,选择合适的源码版本

https://source.android.com/source/build-numbers.html#source-code-tags-and-builds

如  下图,自行选择

    3,下载源码

以源码版本号为名创建文件

$ mkdir android-6.0.1_r62
$ cd android-6.0.1_r62

 初始化repo,注意把 -b 后面改为你要下载的版本号

$ repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r62

使用下面的命令就可以开始下载了

$ repo sync 

但是,请先不要着急下载,由于下载过程中还会遇到各种各样的问题,所以我们需要创建一个自动下载脚本,确保出错了之后会自动执行repo sync,在android-6.0.1_r62下创建一个脚本down.sh,代码如下:
 

#!/bin/bash
repo sync  -j16
while [ $? = 1 ]; do  
        echo “======sync failed, re-sync again======”  
        sleep 3  
        repo sync  -j16
done 

在shell中执行下面命令:

chmod a+x down.sh
./down.sh

 当出现下面的语句时,说明下载完成,通常需要几个小时

Syncing work tree :100% (456/456), done.
 

进入下面的目录可以看到我们编译的结果

cd /home/wendy/android-7.0.0_r17/out/target/product/angler

//angler 是产品名字,不一定相同

 如下图中 system.img文件就是将来要刷入手机中 

 4,编译前准备

    >更换软件源

       首先打开文件

sudo gedit /etc/apt/sources.list 

       然后给文件的开始加入下面的内容

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

     >安装依赖

sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib 
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 lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4

Ubuntu 16.04请务必使用上面的依赖,Ubuntu 16.04需要的依赖和Ubuntu 14.04所需要的依赖是不同的。

    >关于java

      根据自己编译的源代码版本对照下图决定使用JDK的版本,使用     java -version    查看Java版本

      如果java版本不同,就需要重新安装 

      安卓7.0以上的源码编译需要java8

      

    

//正常来说命令行配置jre即可
sudo apt-get install openjdk-8-jre
//但我同时安装了jdk
sudo apt-get install openjdk-8-jdk

      

sudo add-apt-repository ppa:openjdk-r/ppa 
sudo apt-get update
sudo apt-get install openjdk-7-jdk 

      >关于jack的编译内存

       开始之前加上这句语句

export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"

 5,开始编译

    >导入编译Android源码所需的环境变量和其它参数:

source build/envsetup.sh

    >运行lunch命令选择编译目标: 

lunch

     直接输入想要编译的目标序号就可以了

è¿éåå¾çæè¿°

    >关于编译目标的选择

       编译目标的编号模板:平台名_手机型号代号_开发模式

       手机型号代号需要自行查找

è¿éåå¾çæè¿°

        开发模式

            user 用于正式产品 
            userdebug 和user类似,但是有root权限,并且可以调试,主要用于调试 
            eng 开发用的选项,配有额外的调试工具。

         因此一般选用userdebug模式

     >开始编译,执行make -j8, 8为同时编译的线程数,一般google推荐这个数字为2倍的cpu个数,博主使用的是8:

make -j8

      关于cpu个数,可以用下面命令查看:

cat  /proc/cpuinfo

好了 ,接下来就是不断地报错和上谷歌修改的过程了。

可能会出现的问题一:

terminating with uncaught exception of type std::bad_alloc: std::bad_alloc Could not build FEC data! Error: terminating with uncaught exception of type std::bad_alloc: std::bad_alloc Out of space? the tree size of out/target/product/angler/system is (MB): 955 out/target/product/angler/system The max is 3072 MB.

ninja: build stopped: subcommand failed. 16:23:12

ninja failed with: exit status 1
解决方案:杀死java进程   在命令行输入pkill -9 java   ,然后再从下图位置重新编译

source build/envsetup.sh

当出现下面的语句时说明编译完成了

make completed successfully 

此时在  andriod6.0.1_r62/out/target/product/generic 目录中就会出现我们编译好的img文件

6,刷入手机

>首先到谷歌官网下载工厂镜像驱动,下载地址如下:

      https://developers.google.com/android/nexus/images

      这时你会看到同一型号手机的多种驱动,需要去之前选择源码的网站查看对应的编号, 如(NBDX09)

      下载的文件保存在~/nexus6p目录中,进行解压。

>配置adb命令

       刷机需要使用adb和fastboot两个命令,先下载最新Android SDK,下载地址如下:http://sdk.android-studio.org/

       打开~/.bashrc文件,在末尾追加下面的代码,注意替换成你的sdk路径:

       export PATH=$PATH:/home/fuchao/Android/Sdk/tools
       export PATH=$PATH:/home/fuchao/Android/Sdk/platform-tools

       重新打开shell,输入adb命令,看看配置是否生效。

 >解锁bootloader 

         bootloader可以简单理解为手机的bios,解锁bootloader之后才可以用fastboot命令刷机(线刷),相当于U盘重装系统,虽然不           解锁也可以通过进入recovery模式的方法刷机(卡刷),相当于PE重装系统,但是强烈建议你解锁,因为解锁之后就不怕变             砖 了,万一玩坏了,最后还可以通过fastboot救回来。
         谷歌在nexus 6p的bootloader前面加了一个oem锁,所以先得解oem锁,才能再解bootloader锁。 
         解oem锁很简单,开机进入设置、关于手机、连续点版本号6次,进入开发者模式,将OEM解锁选项打开。

         接着解bootloader锁,在shell中输入下面命令进入bootloader:

         

adb reboot bootloader

          用音量+选择yes,电源键确认,解锁完成。 
          解锁完毕后,开机会显示一个警告,请无视之

          至此解锁完毕。

 >开始刷机

         首先进入解压后的工厂镜像驱动文件夹中,

         重启进入bootloader,接着执行flash-base.sh脚本:

adb reboot bootloader
./flash-base.sh

         接着刷入驱动,解压 image-angler-mtc20f.zip 文件后进入image-angler-mtc20f文件夹(mtc20f为驱动编号,不一定相同):

unzip image-angler-mtc20f.zip
cd image-angler-mtc20f

        刷入vernder.img:

fastboot flash vendor vendor.img

       驱动刷入完毕,接着就要刷入我们编译的其他镜像了,进入源码编译后生成的镜像目录

       android-6.0.1_r62/out/target/product/angler:

cd android-6.0.1_r62/out/target/product/angler

      依次执行下面的命令,分别刷入镜像:

fastboot flash boot boot.img
fastboot flash recovery recovery.img
fastboot flash system system.img
fastboot flash userdata userdata.img
fastboot flash cache cache.img

      好了,刷完之后重启就可以了:

fastboot reboot

  >一次批量刷入

       其实刷机就是将我们编译出来的系统镜像和工厂镜像里面的vernder.img用fastboot命令写入手机中,那么我们可以将imge-           angler-mtc20f中的镜像除vender.img以外全部替换成我们自己的,然后打包,用flash-all.sh脚本一次性刷入,

     

cd ~/nexus6p/angler-mtc20f/image-angler-mtc20f
zip image-angler-mtc20f ./*

 在imge-angler-mtc20f下将所有文件压缩打成包imge-angler-mtc20f.zip:

cd ~/nexus6p/angler-mtc20f/image-angler-mtc20f
zip image-angler-mtc20f ./*

这个时候在 imge-angler-mtc20f 文件下会产生一个 imge-angler-mtc20f .zip的文件,接着替换掉上级文件夹angler-mtc20f中的同名文件,如果你想保留官方镜像文件,只需要重命名一下官方zip包就可以了。接着执行flash-all.sh脚本:
 

cd ~/nexus6p/angler-mtc20f
./flash-all.sh

等待完成即可

猜你喜欢

转载自blog.csdn.net/wm12345645/article/details/89204165
今日推荐