Vmware安裝ubuntu編譯android源碼詳細過程

說明下面文章經過博主在ubuntu12.04 64位編譯過android4.4.4_r1+android4.4.4_r2+android4.0.3_r6+android2.3_x+android5.1.1_r6+android5.1.1_r12這些版本均成功,希望對大家有幫助

一、安裝ubuntu

http://www.ubuntu.org.cn/index_kylin  挑選一個版本,怎麼安裝就不囉嗦了,補充一點千萬要大一點,反正大了也不佔實際空間,等下空間小就又要重裝系統了,編譯一個版本準備100G吧,編譯2個版本的內核就準備200G吧,編譯過程不用害怕,出錯了就百度,然後用apt-get安裝需要的軟件就行,我這裏選擇Ubuntu12.04 desktop 64位,用的是vwmare虛擬機

1.    常用命令

給予root權限

Sudo或者sudo –s或者root權限

    如果你是下載的是別人丟網上的android源碼壓縮文件可以用下面的解壓

解壓 命令

        .tar.gz     格式解壓爲          tar –zxvf xx.tar.gz

.tar.bz2   格式解壓爲          tar –jxvf xx.tar.bz2

        安裝7z:apt-get install p7zip-full

使用7z:7z x file file是要解壓的文件名

 

2.root的權限登錄(議設置,用root登錄,方便後續操作)

對於Ubuntu12.04 desktop 64位系統                    

執行:  gedit /etc/lightdm/lightdm.conf修改配置文件

[SeatDefaults]
allow-guest=false
autologin-user=root
autologin-user-timeout=0   #0
秒就登錄
autologin-session=lightdm-autologin
user-session=ubuntu
greeter-session=unity-greeter

然後我們啓動root帳號:打開中斷輸入
sudo passwd root
根據提示輸入root帳號密碼。
重啓ubuntu,不需要手動輸入root用戶名密碼,系統會自動進入root用戶。

 

二、安裝jdk

必須安裝jdk1.6,注意你用的ubuntu是64位的就安裝64位的jdk,如果用32位的就安裝32位的jdk,我這裏用64位的

1.       把jdk-6u35-linux-x64.bin放到/usr/lib/java目錄下,並且修改成777權限

2.       運行./jdk-6u35-linux-x64.bin

3.       配置環境變量

Gedit /etc/environment

JAVAHOME=/usr/lib/java/jdk1.6.0_35  PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/lib/java/jdk1.6.0_35/bin:/usr/lib/java/jdk1.6.0_35/jre/bin"  CLASSPATH=/usr/lib/java/jdk1.6.0_35/lib:/usr/lib/java/jdk1.6.0_35/jre/lib

4.       執行命令,使配置生效

source /etc/environment ( source /home/username/.bashrc )

驗證是否安裝成功,中斷輸入

Java –version,

Javac

java

三、對於ubuntu12.04 64位desktop版編譯android4.0.3和android4.4.4配置和編譯過程

1、ubuntu環境變量詳解

 

修改用戶環境變量

用戶環境變量通常被存儲在下面的文件中:

·        ~/.profile

·        ~/.bash_profile 或者 ~./bash_login

·        ~/.bashrc

上述文件在Ubuntu 10.0以前版本不推薦使用。

系統環境變量

echo $PATH查看原有那些變量

系統環境變量一般保存在下面的文件中:

·        /etc/environment

·        /etc/profile

·        /etc/bash.bashrc

/etc/profile和 /etc/bash.bashrc在Ubuntu 10.0版本中不推薦使用。

 

(1)修改辦法1

/etc/environment改了之後 使他立即生效source /etc/environment 這個不行啊每次打開終端都要輸入一次,你還是重啓電腦吧,重啓電腦就永久生效了

(2)修改辦法2

用編輯器打開/etc/profile,然後加入

export JAVA_HOME=/usr/java/jdk1.7.0_04

exportPATH=.:$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

然後輸入 source /etc/profile使其生效,不行就重啓

 

(3)臨時導入

source build/envsetup.sh 臨時導入sh的環境變量到系統環境變量中

2、安裝編譯過程中需要的軟件

建議安裝完這些軟件,看下面5出錯解決辦法裏面需要安裝的軟件和配置,還請也安裝上,免得中途出問題,又要安裝,,當然也可以跟我一樣,等會兒出錯了,再去安裝

sudo apt-get install gnupg flex bison gperf libsdl1.2-dev libesd0-dev

sudo apt-get install libwxgtk2.6-dev squashfs-tools build-essential 

sudo apt-get install zlib1g-dev pngcrush schedtool ia32-libslibncurses5-dev

3、下載android源碼

使用

apt-get install curl  先安裝curl

apt-get install git 安裝git

curl"http://php.webtutor.pl/en/wp-content/uploads/2011/09/repo">/bin/repo

這樣在/bin目錄下面有一個repo文件了,repogoogle提供的用來專門下載源碼的腳本

 

chmod a+x repo

 

mkdir my_down_android_core    千萬別用中文目錄,注意桌面也是中文啊,別丟桌面,桌面也是中文目錄,等下編譯會報錯

cd my_down_android_core

repo init -u https://android.googlesource.com/platform/manifest

好等一會兒會讓你輸入姓名和郵箱的,輸入就是了

 

自己去這裏https://android.googlesource.com/platform/manifest/+refs挑選一個喜歡的版本吧然後

repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.3_r1

repo sync 如果網絡不穩定有可能會中斷,中斷以後你繼續repo sync就行了

 

如果出現fatal: '../platform/abi/cpp.git' does not appear to be a gitrepository”錯誤則

1、在存放android系統源代碼的目錄(也就是執行repo sync命令的目錄)下,有個.repo的隱藏目錄,用ls -a可以查看的到,進入該目錄:cd.repo;

2、打開.repo目錄下的manifest.xml文件(命令vimmanifest.xml)並找到fetch屬性,在我的文件中顯示fetch="..",將fetch修改爲fetch="git://Android.git.linaro.org/",保存並退出;

3、繼續repo sync就可以下載了。

4、編譯配置

cd到你下載的源碼目錄  (注意第二次編譯前要make clean

source build/envsetup.sh

lunch 

然後選擇編譯的平臺 1

make –jn(n建議用cpu核心的2倍,不知道自己電腦cpu核心的百度找答案)(建議先看下先把下面出錯解決辦法要安裝的軟件安裝上,不要怕編譯過程報啥錯誤就百度,然後把軟件安裝上就行了

5、出錯解決辦法

下面是我編譯依次報錯和解決辦法。

報錯1:/usr/include/features.h:324:26:致命錯誤: bits/predefs.h:沒有那個文件或目錄編譯中斷

解決1: apt-get installlibc6-dev-i386

報錯2: make: ***[out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]錯誤 1

解決2:因爲gcc版本太高了,安裝

apt-get install gcc-4.4

apt-get install g++-4.4

然後把系統的gcc和g++這兩個變量都鏈接到4.4版本

cd到/usr/bin目錄

ls -l gcc*可以看到gcc鏈接的是gcc-4.6

我們把這個鏈接的刪掉,

然後輸入ln -s gcc-4.4 gcc,重新換成我們的鏈接

再次輸入ls -l gcc*發現已經鏈接到我們的啦

可以看到已經指向我們的gcc-4.4了,用同樣的辦法,讓g++鏈接到g++-4.4

ln -s g++-4.4 g++

 

報錯3:

g++: selected multilib '32' not installed

make: ***[out/host/linux-x86/obj/EXECUTABLES/aidl_intermediates/aidl]錯誤 1

解決3:

apt-get install g++-4.4-multilib gcc-4.4-multilib

 

報錯4:

/usr/bin/ld: cannot find -lz
collect2: ld returned 1 exit status
make: ***[out/host/linux-x86/obj/EXECUTABLES/aapt_intermediates/aapt] Error 1

解決4:

apt-get install lib32z1-dev

 

報錯5:

/usr/bin/ld: cannot find -lncurses

collect2: ld returned 1 exit status

make: ***[out/host/linux-x86/obj/EXECUTABLES/adb_intermediates/adb]錯誤 1

解決5:

apt-get install lib32ncurses5-dev

 

錯誤6:

/usr/bin/ld: cannot find -lGL

collect2: ld returned 1 exit status

host SharedLib: libEGL_translator (out/host/linux-x86/obj/lib/libEGL_translator.so)

make: ***[out/host/linux-x86/obj/lib/libGLES_CM_translator.so]錯誤 1

解決6

ln-s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2 /usr/lib/libGL.so

 

錯誤7

/usr/bin/ld: cannot find -lX11

collect2: ld returned 1 exit status

make: *** [out/host/linux-x86/obj/lib/libOpenglRender.so]錯誤 1

解決7

ln -s /usr/lib/i386-linux-gnu/libX11.so.6/usr/lib/i386-linux-gnu/libX11.so

 

報錯8:

/usr/bin/ld: cannot find -lGL

collect2: ld returned 1 exit status

/usr/bin/ld: cannot find -lGL

collect2: ld returned 1 exit status

make: ***[out/host/linux-x86/obj/lib/libGLES_CM_translator.so]錯誤 1

make: *** 正在等待未完成的任務....

host SharedLib: libGLES_V2_translator(out/host/linux-x86/obj/lib/libGLES_V2_translator.so)

make: *** [out/host/linux-x86/obj/lib/libEGL_translator.so]錯誤 1

解決8:

ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1.2/usr/lib/libGL.so (注意看/usr/lib/i386-linux-gnu/mesa/目錄下面/libGL.so的版本),同上錯誤6一樣的

報錯9:

make: ***[out/host/linux-x86/obj/SHARED_LIBRARIES/libbcc_intermediates/libbcc-stamp.c] 錯誤 1
make: *** 正在刪除文件“out/host/linux-x86/obj/SHARED_LIBRARIES/libbcc_intermediates/libbcc-stamp.c”
make: *** 正在等待未完成的任務....
解決9

apt-get install git

apt-get install git-core

 

6、測試和運行

(1)用源碼自帶的運行,在ubuntu上運行

方法一:運行emulator命令(先cd到源碼目錄),出現這個說明成功(注意以後每次如果你重啓電腦之後運行模擬器都要輸入,source build/envsetup.sh 不然emulator找不到命令的)

選擇setting->about phone可以看到一些信息

 

題外話:運行adb可以push文件到模擬器哦

方法二:完整命令

在ubuntu上完整命令(書上那麼寫但是我沒有成功android4.0.3和androdi4.4.4失敗)

 

emulator –kernel  ./prebuilt/android-arm/kernel/ kernel-qemu-armv7 –sysdir./out/target/product/generic –system system.img –data userdata.img –ramdiskramdisk.img

額外加上命令

emulator -partition-size 500可以設置啓動的內存大小

 

(2):把編譯好的文件用android sdk自帶模擬器運行

第一種方式

在windows上,注意哦這裏你要先安裝好android sdk自帶的模擬器哦,

把ubuntu上面那4個文件拷貝到windows然後運行下面命令

D:\android_core\myAndroidAVD\android4.0.3>emulator -kernelkernel-qemu-armv7 -sy

sdir D:\android_core\myAndroidAVD\android4.0.3 -systemsystem.img -data userdata

.img -ramdisk ramdisk.img

運行起來之後再此目錄下回生成一個hardware-qemu.ini文件

修改hw.ramSize爲hw.ramSize=1024,不然內存太小會很卡的,如果有別的異常請用android sdk自帶模擬器自己建立一個,然後對比此文件的設置吧

注意這種辦法不能,只能android4.0.3有用,對於android4.4.4失敗

第二種方式

在android sdk的鏡像下載目錄system-images,打開然後偷龍換鳳,換掉上面那四種文件即可,然後用android sdk自帶的模擬器管理軟件來生成一個模擬器

經過不斷嘗試

對於android4.0.3的kernel文件爲

/prebuilt/android-arm/kernel/kernel-qemu-armv7文件有用也就是android2.6.xx 有用,記得複製到android sdk下載的鏡像目錄後改名爲kernel-qemu

對於android4.4.4的kernel文件爲

/prebuilts/qemu-kernel/arm/kernel-qemu-armv7  有用,記得複製到android sdk下載的鏡像目錄後改名爲kernel-qemu

/prebuilts/qemu-kernel/arm/kernel-qemu  無效

編譯後得到的文件說明

我們可以在源碼目錄的out/target/product/generic/生成對應固件等文件

Build 結果的目錄結構

所有的編譯產物都將位於 /out目錄下,該目錄下主要有以下幾個子目錄:

·        /out/host/:該目錄下包含了針對主機的 Android開發工具的產物。即 SDK中的各種工具,例如:emulatoradbaapt等。

·        /out/target/common/:該目錄下包含了針對設備的共通的編譯產物,主要是 Java應用代碼和 Java 庫。

·        /out/target/product/<product_name>/:包含了針對特定設備的編譯結果以及平臺相關的 C/C++庫和二進制文件。其中,<product_name>是具體目標設備的名稱。

·        /out/dist/:包含了爲多種分發而準備的包,通過make disttarget將文件拷貝到該目錄,默認的編譯目標不會產生該目錄。

Build 生成的鏡像文件

Build 的產物中最重要的是三個鏡像文件,它們都位於 /out/target/product/<product_name>/目錄下。

這三個文件是:

·        system.img:包含了 Android OS的系統文件,庫,可執行文件以及預置的應用程序,將被掛載爲根分區。

·        ramdisk.img:在啓動時將被 Linux內核掛載爲只讀分區,它包含了 /init文件和一些配置文件。它用來掛載其他系統鏡像並啓動 init進程。

·        userdata.img:將被掛載爲 /data,包含了應用程序相關的數據以及和用戶相關的數據。

 

編譯android源碼部分內容

把我們寫的helloandroid apk編譯到android源碼裏面去

 

在packages/experimental目錄下,開發一個helloandroid

重新編譯打包得到system.img文件,用這個啓動模擬器,就可以看到helloworld了.

單獨編譯和打包

用mmm單獨編譯某個模塊,然後用make snod命令來純粹執行打包android系統鏡像文件system.img的操作

 

1、Source  build/envsetup.sh

 

2、mmm./packages/experimental/HelloAndroid/   單獨編譯源碼一部分,而不需要全部編譯

 

編譯完成以後在

Out/target/product/generic/system/lib目錄

 

如果是動態鏈接庫文件,並且是硬件抽象層文件,就保存在

Out/target/product/generic/system/lib/hw目錄

 

3、Make snod

就可以重新打包生成system.img文件,在

Out/target/product/generic/目錄

然後同上運行模擬器可以看到

 

四、Vmware安裝ubuntu12.04 64位編譯android2.3x源碼詳細過程

先安裝好ubuntu和java和root啓動,詳細見編譯android4.x的筆記,下面只說需要安裝的軟件

錯誤1

/bin/bash: prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-gcc:沒有那個文件或目錄

解決1:apt-get install lsb-core

 

錯誤2:/bin/bash: bison: 未找到命令

解決2:$ sudo apt-get install bison

 

錯誤3./bin/bash: flex:未找到命令
解決3 apt-get install flex

 

錯誤4.external/clearsilver/cgi/cgi.c:22:18:致命錯誤: zlib.h:沒有那個文件或目錄
解決4 sudo apt-get install zlib1g-dev

 

錯誤5      make:[out/host/linux-x86/obj/EXECUTABLES/emulator_intermediates/android/skin/window.o]
解決6      6sudo apt-getinstall libx11-dev
錯誤6.     sh: gperf: notfound
解決6      sudo apt-getinstall gperf

 

錯誤5/usr/include/features.h:324:26:致命錯誤:bits/predefs.h:沒有那個文件或目錄

解決6 apt-get install gcc-multilib即可

 

錯誤6  g++: selected multilib '32'not installed

解決6  apt-get installg++-4.4-multilib gcc-4.4-multilib

 

錯誤7  /usr/bin/ld: skippingincompatible /usr/lib/libz.a when searching for -lz

          /usr/bin/ld:cannot find -lz

解決7  apt-get install lib32z1-dev

 

錯誤8   /usr/bin/ld: cannot find-lncurses

解決8  然後接着在終端輸入 apt-get install libncurses*

 

錯誤9:還是上面的6錯誤

解決9 :apt-get install lib32ncurses5-dev

 

五、Vmware安裝ubuntu12.04 64位編譯android5.1.1_r6源碼詳細過程

同上,不過不要安裝jdk1.6而是安裝openjdk1.7

sudo apt-get install default-jre

sudo apt-get install default-jdk

 

 

參考文章

《android系統源代碼情景分析》羅陽升第一章

 

http://jingyan.baidu.com/article/5bbb5a1b3a541313eba17915.html android4.4源碼編譯環境搭建

http://jingyan.baidu.com/article/3c48dd34777079e10ae3585b.html Android 4.4  源碼下載

http://jingyan.baidu.com/article/a501d80ce61ad0ec630f5e0b.html android4.4源碼編譯

Ubuntu11.1032位編譯android4.0

http://blog.csdn.net/flydream0/article/details/7036156如何在Ubuntu11.10(32位)下載Android4.0源碼(圖文)

http://blog.csdn.net/flydream0/article/details/7046612如何在Ubuntu11.10(32位)下編譯Android4.0源碼(圖文)

 

查看cpu核心數

http://jingyan.baidu.com/article/27fa7326ff3b9146f9271f7e.html    如何查看電腦CPU的核心個數

查看ubuntu隱藏文件

http://jingyan.baidu.com/article/49711c61415945fa441b7c89.html  如何在ubuntu下查看隱藏的文件和文件夾

 

安裝jdk

http://jingyan.baidu.com/article/60ccbceb63432364cab197cb.htmlUbuntu下安裝JDK1.6

在官網下載歷史jdk版本

http://jingyan.baidu.com/article/9989c746064d46f648ecfe9a.html如何在官網下載java JDK的歷史版本

安裝repo辦法

https://source.android.com/source/downloading.html#installing-repo


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章