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 ~/.bashrcb) 在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
遇到的問題:..........(未完待續)