歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Android 4.1 (Jelly Bean) 源碼編譯過程總結

Android 4.1 (Jelly Bean) 源碼編譯過程總結

日期:2017/2/28 14:46:04   编辑:Linux教程

Google官方已經發布了Android 4.1 Jelly Bean的源碼,本人第一時間將源碼托了下來(托了一個通宵),今天又花了一早上時間編譯ROM並刷到自己的Galaxy Nexus中,雖說Android 4.1已經用了一個多星期了,但是作為Android開發者和愛好者,體驗源碼下載、編譯、刷機的整個過程還是很有意義的,然而在編譯和刷機過程中也遇到了一些問題,晚上抽了點時間將整個過程總結一下,同時也希望能幫助到想通過自己編譯刷機的朋友,廢話不多說了~~切入正題。

1、編譯環境搭建,本人使用的是Ubuntu 12.04,下面所有過程都基於該平台。

具體可參考:Ubuntu 12.04搭建Android開發環境 http://www.linuxidc.com/Linux/2012-09/69961.htm

2、下載Android 4.1源碼,參考:http://source.android.com/source/downloading.html,源碼下載過程中經常會遇到下載失敗的情況,非常浪費時間,所以編寫一個失敗重傳的腳本可以減少很多不必要的麻煩。將下面的shell腳本保存為download.sh文件放到源代碼目錄中,執行./download.sh開始下載(替代文檔中最後一步repo sync,其余步驟必須按照文檔中介紹的一步一步來)

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

3、接下來准備開始編譯rom,可參考http://source.android.com/source/building.html,首先輸入source ./build/envsetup.sh,然後輸入lunch full_maguro-user(不同平台參數不一樣,具體參考文檔說明),接下來執行make -j4編譯rom(根據機器CPU的核心數量來設定參數),下來就是漫長的等待過程了(筆者機器性能不給力,整個編譯過程大概花費了3個半小時)。如果make -j4的執行過程中一開始提示jdk版本不對,那麼按照下面步驟來解決:

從Oracle官方下載jdk1.6.0_33.bin http://www.oracle.com/technetwork/java/javase/downloads/jdk6-downloads-1637591.html

執行sudo chmod a+x /home/jamie/jdk/jdk1.6.0_33.bin(注意這裡的目錄和你機器上的目錄是不一樣的)

sudo ./home/jamie/jdk/jdk1.6.0_33.bin

sudo gedit /etc/profile,尾部添加

#set java environment

export JAVA_HOME=/home/jamie/jdk1.6.0_33

export JRE_HOME=/home/jamie/jdk1.6.0_31/jre

export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

執行source /etc/profile

sudo update-alternatives --install /usr/bin/java java /home/jamie/jdk1.6.0_33/bin/java 300

sudo update-alternatives --install /usr/bin/javac javac /home/jamie/jdk1.6.0_33/bin/javac 300

sudo update-alternatives --config java選擇所需要的jdk版本

4、編譯完成後會在android_souce/out/target/product/maguro/中生成一大堆img文件,這就是編譯生成的刷機rom了

5、按照google官方文檔的步驟接下來就是刷機了,然而結果很悲劇,由於官方文檔針對的是模擬器,而筆者編譯的是Galaxy Nexus,出現刷完直接黑屏無法啟動的情況,突然想到昨天網上看到google發布了Android 4.1的二進制文件,而這些文件正好是藍牙、wifi、顯卡等驅動,google將這些驅動單獨提供下載,並未集成到源碼中,所以我們需要將其編譯進rom中,步驟如下:

打開https://developers.google.com/android/nexus/drivers,下載Galaxy Nexus對應的4個文件並解壓到源代碼的目錄,解壓出來的4個文件是4個shell腳本,分別為extract-broadcom-maguro.sh,extract-imgtec-maguro.sh,extract-invensense-maguro.sh,extract-samsung-maguro.sh

分別執行這4個腳本,執行期間會要求輸入“I ACCEPT”

重新執行make -j4進行編譯,這次編譯過程時間很短

6、完成上面的驅動集成後,輸入 cd /home/jamie/android_source/out/host/linux-x86/bin(該目錄下有fastboot文件), 然後輸入sudo ./fastboot flashall -w開始刷機,一般情況下這一步會出現以下錯誤提示:neither -p product specified nor ANDROID_PRODUCT_OUT set,原因是沒有設置rom的位置,解決方法要麼使用-p參數,後面跟著rom的位置,或者配置環境變量ANDROID_PRODUCT_OUT,過程如下:

輸入sudo gedit /etc/profile,在尾部添加export ANDROID_PRODUCT_OUT=/home/jamie/android_source/out/target/product/maguro,保存並退出

然後輸入source /etc/profile使剛設置的環境變量立即生效。

7、最後等待刷機完成,完成後手機會自動重啟,大功告成!!最後附上成果圖

更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11

Copyright © Linux教程網 All Rights Reserved