Ubuntu 14.04 下載和編譯源碼并刷入Nexus 5x 真機

環(huán)境: 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 ;

? ? ? ? 執(zhí)行:$ sudo update-alternatives –config java,選擇java的版本

? ? ? ? 執(zhí)行:$ sudo update-alternatives –config javac,選擇javac的版本

? ? ? ? 設置JDK優(yōu)先級

? ? ? ? $ 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源碼

? ?打開終端,執(zhí)行如下命令:

? ?### 新建一個bin目錄

? ? ? ? $ mkdir ~/bin

? ?### 將bin目錄添加到環(huán)境變量中,這樣做可以在任何目錄都可以訪問

? ? ? ? $ PATH=~/bin:$PATH

? ?### 使用 curl 下載 repo 到bin目錄下

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

? ?### 修改repo文件:國內(nèi)訪問不了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 分區(qū)工具再分配空間

? ? ? ? $ 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 參數(shù) 是取的源碼中的一個分支,較穩(wěn)定的版本,而不加 -b 則會下載Android主線上正在開發(fā)中的最新代碼。

? ? ? ??Android版本與代號對應關系?參考這個網(wǎng)址查看手機的版本代號,部分截圖如下

? ?### 開始漫長的下載.....

? ? ? ? $ repo sync? 下載過程中,務必保證網(wǎng)絡通暢,如中途中斷,重新執(zhí)行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源碼

? ?### 搭建編譯環(huán)境之 安裝JDK

? ? ? ? ?在android 5.0之前,編譯使用的是Oracle JDK,之后google將其替換成OpenJDK。上面有安裝方法,此處不再贅述。。。

? ?### 搭建編譯環(huán)境之 安裝ccache

? ? ? ???作用:加快編譯速度

? ? ? ? $ sudo apt-get install ccache

? ? ? ? $ source ~/.bashrc

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

? ? ? ? $ prebuilts/misc/linux-x86/ccache/ccache-M50G 設置編譯高速緩存

? ?### 搭建編譯環(huán)境之 安裝需要的包

? ? ? ? 參考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 ,然后再執(zhí)行上一步的操作

### 搭建編譯環(huán)境之 下載硬件驅(qū)動

? ? ? ? google雖然代碼開源,但是驅(qū)動并不開源,我們下載的源碼中是沒有vendor這個文件夾的,真機環(huán)境需要驅(qū)動

? ? ? ? 官方下載驅(qū)動地址:developers.google.com/android/nexus/drivers

? ? ? ? 這里就需要根據(jù)下載的源碼版本號去找相應的驅(qū)動了,在網(wǎng)址右側(cè)目錄尋找相應的型號以及版本號,如圖:

尋找自己型號的驅(qū)動
nexus 5x的驅(qū)動,點擊Link下載

? ? ? ? 驅(qū)動下載完畢后,解壓出來其實就是幾個腳本文件,將腳本cp到源碼根目錄下 sh xxxxx.sh 執(zhí)行,執(zhí)行完畢后會生成vendor文件夾。 PS:執(zhí)行腳本會提示按Enter繼續(xù),這里別連續(xù)按,因為在最后會讓你輸入“I ACCEPT”,同意使用協(xié)議的,大概能看到第八條的時候速度慢點就能看到了。

? ?### 開始編譯

? ? ? ? 導入環(huán)境變量: source build/envsetup.sh

? ? ? ? lunch選擇編譯目標:輸入數(shù)字

? ? ? ? 開始編譯: make -j8 (-j后面數(shù)字根據(jù)電腦CPU個數(shù)決定,公司電腦配置比較好,我設置的18,下班前編譯,早上來就好了)

? ? ? ? 查看CPU個數(shù):cat/proc/cpuinfo


No 4 . ?燒錄到nexus 5x?

? ?### 安裝adb

? ? ? ? $ sudo apt-get install adb

? ?### 進入fastboot模式

??????? 設置->關于手機->版本號->點擊五次進入開發(fā)者模式->打開USB調(diào)試,然后命令行輸入:adb devices連接成功會提示如下:

??????? List of devices attached

??????? 021cbd7a4a92c20f????? device

? ? ? ? $ adb reboot bootloader

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

?? ### 配置USB設備(驅(qū)動)

??????? 手機連接電腦,命令行輸入lsusb:如下

??????? 斷開連接,繼續(xù)輸入lsusb:如下

??????? 可以看到斷開連接后少了一個usb設備,即 Bus 001 Device 025: ID 18d1:4ee7 Google Inc.

??????? 編輯rules文件,將此設備添加到規(guī)則中 --> ~$ 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已經(jīng)替我們解決了這個題,可是我是用命令安裝的fastboot,具體原因我也不是很清楚。

????? 解決辦法 :cd 進入 ~/source/out/host/linux-x86/bin$,在這個目錄下有一個fastboot,我們就在當前目錄下執(zhí)行 fastboot flashall-w

錯誤2:手機進入adb reboot bootloader 模式后 輸入fastboot flashall -w 顯示waiting for devices

?????? ? ? ? ? 但是開機狀態(tài)下 fastboot就可以正常連接

解決辦法:手機重啟進入bootloader模式后,連接電腦輸入lsusb 然后將ID信息再添加到rules文件中

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


?? 總之,遇到問題多百度google,最好還是將官方文檔看一遍。這篇文章給需要的人做個參考,也是記錄下自己的學習過程!

?? 大家編譯燒錄成功后請記得給我留言,加油!!!

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容