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,最好还是将官方文档看一遍。这篇文章给需要的人做个参考,也是记录下自己的学习过程!

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容