1. 程式人生 > >Android原始碼編譯環境的配置以及原始碼編譯(find7)

Android原始碼編譯環境的配置以及原始碼編譯(find7)

PS:首先,我們在準備編譯環境之前,為了防止網路出錯的問題(需要翻牆),請在終端下輸入:sudo gedit /etc/hosts;開啟hosts檔案,然後新增:

192.30.252.129  github.com

74.125.31.82    www.googlesource.com 

74.125.31.82    android.googlesource.com 

203.208.46.172  cache.pack.google.com 

59.24.3.173     cache.pack.google.com

也可以從https://laod.org/,下載最新的host檔案替換ubuntu系統中的hosts;然後在終端中輸入:sudo /etc/init.d/networkingrestart 重啟網路即可;

準備編譯環境:

1,安裝64位的ubuntu系統,虛擬機器記憶體分配為2g(看個人電腦配置,我這裡配置為4g),硬碟至少100G空間(原始碼20G+,編譯後整個目錄約60~70G);
   2,  更新系統至最新的版本,終端下輸入:sudo apt-get update;sudo apt-get upgrate
3,安裝一些編譯使用的lib庫、同步原始碼使用的工具

a) 系統是32位和64位的都需要安裝:
bison build-essential curl flex git gnupg gperf libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk2.8-devlibxml2 libxml2-utils lzop maven openjdk-7-jdk pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev
b) 對於64位系統,除了上面的還需要安裝:
g++-multilib gcc-multilib lib32ncurses5-dev lib32readline-gplv2-dev lib32z1-dev
c) 對於Ubuntu 15.10以及更新的系統,需要做一下的改變:
lib32readline-gplv2-dev → lib32readline6-dev
d) 對於Ubuntu 16.04以及更新的系統,需要做一下的改變:
libwxgtk2.8-dev → libwxgtk3.0-dev

openjdk-7-jdk → openjdk-8-jdk

4, 安裝openjdk(版本看裝的ubuntu的版本,在這裡用openjdk_7-jdk)

5,生成目錄:

$mkdir ~/bin#(用於存放之後下載的repo)

$mkdir ~/android/system#(目錄名自己可以隨便取)

6,安裝 repo

a) $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 或者直接把下載好的repo放在~/bin目錄下。
b) $ chmod a+x ~/bin/repo (chmod命令是非常重要的,用於改變檔案或目錄的訪問許可權,chmod [who][+|-|=][mode]檔名)

7, 將repo配置到環境變數:

a) sudo gedit ~/.bashrc
b) 在bashrc檔案末尾新增:
#repo
alias repo=”~/.bin/repo”
c) 同步檔案的變化:source .bashrc
到這裡,repo的安裝結束,可以在任何的目錄下使用repo同步原始碼了;

同步原始碼

1,repo初始化

之前新建的資料夾~/android/system用來儲存原始碼;首先在此資料夾根目錄下執行repo初始化命令
$cd ~/android/system/
$repo init –u https://github.com/CyanogenMod/android.git -b cm-11.0

(可以根據自己需求選擇不同的cm branch,在這裡我們選擇的是cm-11.0)

2,開始下載原始碼

$repo sync

PS:我們都使用 $repo sync 命令從CyanogenMod以及google更新最新的原始碼;我們應該每隔幾天就使用該命令來更新原始碼;

注意:在同源碼的過程中,一般都會遇到一些問題會終止我們的同步過程,有兩種辦法可以解決這個問題:

(1)每當出現終止的時候,就再一次輸入 $repo sync 命令

(2)可以加上引數:#repo sync -f   (allows it to recover from network error and moreimportant recover on broken/missing objects

3,對於CM11及以下的系統:獲得預編譯的一些檔案

$cd~/android/system/vendor/cm

$./get-prebuilts

在執行的時候,除了一個提示意外就沒有其他的資訊顯示出來了;這個操作會將一些prebuilt app載入安裝到原始碼中;此操作只需執行一次;

4,獲得find7裝置的配置檔案和核心

確定處於原始碼的根目錄:

$cd ~/android/system

終端輸入:

$source build/envsetup.sh(初始化編譯環境,執行完之後就可以使用croot命令)

breakfast find7(獲得find7機型的配置檔案和核心)

5,讀取手機上一些私有配置檔案

{注:在執行這步之前,要確保自己的linux系統已經安裝了adb和fastboot(因為要將手機連上電腦,電腦通過終端來控制),可以使用

sudo apt-get install android-tools-adb android-tools-fastboot;命令安裝;

問題:如果在安裝的時候出現:

E: Unable to locate package android-tools-adb

E: Unable to locate package android-tools-fastboot

解決:

$sudo apt-get update

$sudo apt-get upgrade

更新了軟體列表,以及軟體版本之後,再次安裝,就能成功}

(1)   確定手機已經通過USB線與電腦連線

(2)你處於~/android/system/device/oppo/find7目錄下

(3)  執行指令碼extract-files.sh

$./extract-files.sh

執行完之後,應該會在~/android/system/vendor/oppo目錄下看到一個從裝置傳過來的特定資料夾(proprietary files);同時Makefiles也會被生成,用來確定這個資料夾被複制到了這個目錄下。

開始編譯

$croot

$brunch find7

遇到的問題:..........(未完待續)