环境: 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
这里就需要根据下载的源码版本号去找相应的驱动了,在网址右侧目录寻找相应的型号以及版本号,如图:
驱动下载完毕后,解压出来其实就是几个脚本文件,将脚本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,最好还是将官方文档看一遍。这篇文章给需要的人做个参考,也是记录下自己的学习过程!
大家编译烧录成功后请记得给我留言,加油!!!