Ubuntu 14.04 下载和编译源码并刷入Nexus 5x 真机

环境: Ubuntu16.04 LTS    Nexus 5x  openjdk 8



No 1 .  安装必要的工具

 ###   安装配置 openjdk :

        添加源 :$ sudo add-apt-repository ppa:openjdk-r/ppa 

        更新:$ sudo apt-get update

        安装 openjdk: $ sudo apt-get install openjdk-8-jdk ;

        为了方便以后编译其他版本的代码,这里我安装了6-8的openjdk

        $ sudo apt-get install openjdk-6-jdk ;

        $ sudo apt-get install openjdk-7-jdk ;

        执行:$ sudo update-alternatives –config java,选择java的版本

        执行:$ sudo update-alternatives –config javac,选择javac的版本

        设置JDK优先级

        $ sudo update-alternatives --config java

        $ sudo update-alternatives --config javac

        选择完后命令输入 java -version 检查

        我并没有配置Java_Home,是因为同事告诉我不配置的话在编译的时候会自动选择jdk版本,相对方便些。

###   安装git : 使用repo工具会用到git

        $ sudo apt-get install git;

        安装完后进行配置:

        $ git config --global user.email "your email Address"

        $ git config --global user.name "your name"

###   安装curl:官方说法就是一个开源的文件传输工具,类似windows 的迅雷

        $ sudo apt-get install curl -y


No 2 .  下载Android源码

   打开终端,执行如下命令:

   ### 新建一个bin目录

        $ mkdir ~/bin

   ### 将bin目录添加到环境变量中,这样做可以在任何目录都可以访问

        $ PATH=~/bin:$PATH

   ### 使用 curl 下载 repo 到bin目录下

        $ curl https://storage-googleapis.lug.ustc.edu.cn/git-repo-downloads/repo > ~/bin/repo

   ### 修改repo文件:国内访问不了Google,需要使用清华镜像下载

        $ sudo gedit ~/bin/repo ;

        设置REPO_URL 为:'git://aosp.tuna.tsinghua.edu.cn/android/git-repo'

   ### 添加权限

        $ chmod a+x ~/bin/repo

   ### 新建目录,用来存放下载的源码,另外:安装Ubuntu的时候务必给 /home最少100G                   空间,否则后面比较麻烦。需要用到 Gparted 分区工具再分配空间

        $ mkdir source  ,然后切换到source目录:$ cd source

   ### 初始化仓库

        $ repo init -u git://aosp.tuna.tsinghua.edu.cn/android/platform/manifest -b android- 7.1.1_r24

        如果提示需要验证信息,使用命令:

        $ git config --global user.email "your email address"

        $ git config --global user.name "your name"

        后面 -b 参数 是取的源码中的一个分支,较稳定的版本,而不加 -b 则会下载Android主线上正在开发中的最新代码。

        Android版本与代号对应关系 参考这个网址查看手机的版本代号,部分截图如下

   ### 开始漫长的下载.....

        $ repo sync  下载过程中,务必保证网络通畅,如中途中断,重新执行repo sync即可。以后需要更新代码的话,同样运行这个命令即可

### 替换已有的AOSP源代码的remote

        如果之前通过其他路径获取过源码,但之后希望通过TUNA同步,只需要将 .repo/manifest.xml中的

        <remote name="aosp" fetch=".." review="https://android-review.googlesource.com/"  />

        改为下面的即可:

        <remote name="aosp" fetch="git://aosp.tuna.tsinghua.edu.cn/android/"  

              review="https://android-review.googlesource.com/" />

       如果git 提示错误,将git:替换成https://


No 3 .  编译Android源码

   ### 搭建编译环境之 安装JDK

         在android 5.0之前,编译使用的是Oracle JDK,之后google将其替换成OpenJDK。上面有安装方法,此处不再赘述。。。

   ### 搭建编译环境之 安装ccache

         作用:加快编译速度

        $ sudo apt-get install ccache

        $ source ~/.bashrc

        $ echo export USE_CCACHE=1>> ~/.bashrc  按Esc 然后输入:qw回车退出

        $ prebuilts/misc/linux-x86/ccache/ccache-M50G 设置编译高速缓存

   ### 搭建编译环境之 安装需要的包

        参考Google官方文档:source.android.com/source/initializing.html

        参考博客:安装依赖

        $ sudo apt-get install g++-multilib

        $ sudo apt-get install python-markdown

        $ sudo apt-get install gperf

        $ sudo apt-get install libxml2-utils

        $ sudo apt-get install zlib1g-dev:i386

        $ sudo apt-get install zip

        $ sudo apt-get install gnupg

        $ sudo apt-get install libncurses5-dev:i386

        $ sudo apt-get install gcc-multilib

        如遇到依赖项错误, $ sudo apt-get install -f ,然后再执行上一步的操作

### 搭建编译环境之 下载硬件驱动

        google虽然代码开源,但是驱动并不开源,我们下载的源码中是没有vendor这个文件夹的,真机环境需要驱动

        官方下载驱动地址:developers.google.com/android/nexus/drivers

        这里就需要根据下载的源码版本号去找相应的驱动了,在网址右侧目录寻找相应的型号以及版本号,如图:

寻找自己型号的驱动
nexus 5x的驱动,点击Link下载

        驱动下载完毕后,解压出来其实就是几个脚本文件,将脚本cp到源码根目录下 sh xxxxx.sh 执行,执行完毕后会生成vendor文件夹。 PS:执行脚本会提示按Enter继续,这里别连续按,因为在最后会让你输入“I ACCEPT”,同意使用协议的,大概能看到第八条的时候速度慢点就能看到了。

   ### 开始编译

        导入环境变量: source build/envsetup.sh

        lunch选择编译目标:输入数字

        开始编译: make -j8 (-j后面数字根据电脑CPU个数决定,公司电脑配置比较好,我设置的18,下班前编译,早上来就好了)

        查看CPU个数:cat/proc/cpuinfo


No 4 .  烧录到nexus 5x 

   ### 安装adb

        $ sudo apt-get install adb

   ### 进入fastboot模式

        设置->关于手机->版本号->点击五次进入开发者模式->打开USB调试,然后命令行输入:adb devices连接成功会提示如下:

        List of devices attached

        021cbd7a4a92c20f      device

        $ adb reboot bootloader

        如果提示没有fastboot  -> $ sudo apt-get install fastboot

   ### 配置USB设备(驱动)

        手机连接电脑,命令行输入lsusb:如下

        断开连接,继续输入lsusb:如下

        可以看到断开连接后少了一个usb设备,即 Bus 001 Device 025: ID 18d1:4ee7 Google Inc.

        编辑rules文件,将此设备添加到规则中 --> ~$ sudo gedit /etc/udev/rules.d/70-android.rules 如果没有这个文件,新建一个

        添加:SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee7", MODE="0666", OWNER=""

        将你手机对应的ID后面的信息替换进去然后保存,然后更新下

        ~$ cd /etc/udev/rules.d

        ~$ sudo chmod a+x 70-persistent-net.rules

        ~$ sudo udevadm control --reload-rules

   ### 指定img镜像位置

        export ANDROID_PRODUCT_OUT=out/target/product/bullhead

   ### 烧录

        fastboot flashall -w

### 烧录过程遇到的问题:

      错误1:data too large

      原因:我们指定的镜像位置的size超过了fastboot定义的最大值,不过我查资料说最新的fastboot已经替我们解决了这个题,可是我是用命令安装的fastboot,具体原因我也不是很清楚。

      解决办法 :cd 进入 ~/source/out/host/linux-x86/bin$,在这个目录下有一个fastboot,我们就在当前目录下执行 fastboot flashall-w

错误2:手机进入adb reboot bootloader 模式后 输入fastboot flashall -w 显示waiting for devices

               但是开机状态下 fastboot就可以正常连接

解决办法:手机重启进入bootloader模式后,连接电脑输入lsusb 然后将ID信息再添加到rules文件中

               ~$ sudo gedit /etc/udev/rules.d/70-android.rules  . 然后按照上面的方法再更新下,然后再次fastboot flashall -w 等待刷机成功。


   总之,遇到问题多百度google,最好还是将官方文档看一遍。这篇文章给需要的人做个参考,也是记录下自己的学习过程!

   大家编译烧录成功后请记得给我留言,加油!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,602评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,442评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,878评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,306评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,330评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,071评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,382评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,006评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,512评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,965评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,094评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,732评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,283评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,286评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,512评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,536评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,828评论 2 345

推荐阅读更多精彩内容