1. 程式人生 > >從清華源下載安卓原始碼(AOSP)Ubuntu14.04

從清華源下載安卓原始碼(AOSP)Ubuntu14.04

一、環境準備

安裝open jdk

在Terminal終端下輸入如下命令列:

#新增openjdk8的第三方源

sudo add-apt-repository ppa:openjdk-r/ppa

#執行更新

apt-get update

#安裝openjdk8

sudo apt-get install openjdk-8-jdk

 檢視open jdk的安裝路徑

在Terminal終端下輸入如下圖所示的命令:

 從上圖中可以看到open jdk的安裝路徑為:/usr/lib/jvm/java-1.8.0-openjdk...

配置/etc/profile以及~/.bashrc檔案

按照下圖格式配置相關檔案,並使用source /etc/profile以及source ~/.bashrc指令是檔案修改生效

二、安裝編譯所需依賴包 

 在Terminal終端下分別輸入如下所示指令,安裝編譯安卓原始碼所需的依賴包

sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib

sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386

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 libgl1-mesa-dev libxml2-utils xsltproc unzip m4

sudo apt-get install lib32z-dev ccache

三、從清華源下載原始碼 

下載repo工具

 mkdir ~/bin

PATH=~/bin:$PATH

curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo

chmod a+x ~/bin/repo

上述指令的作用是先在home目錄下建立bin目錄,然後將其新增到 PATH環境變數中,接著再從清華映象中下載repo工具,並賦予repo相應許可權確保該工具能夠被使用

配置~/.bashrc檔案

repo工具執行過程中會嘗試從官方的git上更新相應的檔案,可以將如下所示的內容新增到~/.bashrc檔案中,使其使用清華的映象源進行更新

export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/' 

使用source ~/.bashrc指令使該檔案生效

下載aosp-latest .tar

下載完畢後可以使用tar -zxvf aosp-latest.jar指令解壓該檔案,解壓出來資料夾名稱為aosp,裡面只有一個叫.repo的隱藏資料夾,該資料夾就是倉庫,安卓原始碼都在裡面,可以使用CTRL+H來檢視該隱藏資料夾。

同步下載原始碼

使用如下指令,同步並匯出原始碼

cd aosp repo sync

PS:repo sync -l // -l表示只匯出程式碼到本地,不通過網路更新程式碼

       repo sync -n // -n表示只通過網路更新程式碼

 上述指令一旦執行,就開始同步Android原始碼,在這個過程中如果出現網路中斷的情況,重新執行repo sync指令就會繼續執行同步下載的過程。也可以編寫一個自動下載指令碼,確保出錯了之後會自動執行repo sync。首先,在aosp資料夾下建立一個指令碼xxx.sh(檔名隨意),然後將如下程式碼複製到指令碼中:

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

最後通過sh xxx.sh 指令執行該指令碼。(PS:-j 後面的數字可以根據自己的電腦配置進行修改,比如你電腦的CPU核心數為4,就將其修改為-j 4)

同步下載完成後,可以得到如下所示的資訊以及相關的資料夾和檔案(圖中所示為Android 9.0的目錄結構):

 

 四、編譯原始碼 

初始化編譯環境 

 Android的每一個工程都有Android.mk檔案,在編譯整個Android系統的時候會遞迴呼叫這些檔案對Android原始碼進行編譯。而使用到的一些編譯命令是 Linux 主機沒有的,是在 envsetup.sh 指令碼定義的,所以我們需要通過該指令碼初始化一個特定的終端,使其可執行諸如 mm、mmm 這類編譯 Android 專用的命令。初初始化指令為:

source build/envsetup.sh

PS:在Android原始碼的根目錄下執行該指令,在本文中該目錄為aosp 

選擇編譯目標

使用 lunch 命令設定編譯目標

對於X86架構的模擬器,可以選擇編譯的目標為aosp_x86_64-eng,所以我們的指令為: lunch aosp_x86_64-eng

編譯 Android 原始碼 

 在 Android 原始碼根目錄內,執行 make 命令就可以開始 Android 原始碼的編譯。但是預設情況下,系統只會使用一個 CPU 核來編譯 Android 原始碼,如果 CPU 是多核的,則可以顯示指出使用多個核編譯 Android 原始碼,這樣可以大大提高編譯效率。比如,CPU為4核的話可以執行make -j 4

執行模擬器

使用emulator 指令執行模擬器