說明下面文章經過博主在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文件了,repo是google提供的用來專門下載源碼的腳本
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中的各種工具,例如:emulator,adb,aapt等。
· /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