android下載編譯以及文件系統提取總結

android下載編譯以及文件系統提取總結

原文地址:http://bbs.androidin.com/archiver/tid-2413.html

由於論壇改版,很多有用的資源都不見了,所以這裏把自己對cupcake下載和編譯方法進行詳細說明,以後還會陸續發完善的開發板移植說明、內核編譯說明、一些模塊級的分析等,希望對剛開始做android的朋友有所幫助,同時歡迎高手指正。

一.PC工作環境準備
1.從Ubuntu官方主頁[url=http://www.ubuntn.com.cn]www.ubuntn.com.cn[/url]下載Ubuntu8.04桌面版,然後完全安裝。
2.打開ubuntu終端,輸入sudo apt-get install命令來通過ubuntu服務器在線安裝需要使用的軟件,這裏不需要選 擇軟件版本,ubuntu服務器會做自動的版本匹配。待安裝的軟件有flex,bison,gperf,libsdl-dev,libesd0- dev,libwxgtk2.6-dev,build-essential,python,valgrind,curl,git。執行命令後使用 which命令驗證是否 安裝成功,注意,如果缺少部分軟件,或者安裝沒有成功,編譯通常都會遇到問題,無法完成。
3.從[url=http://www.java.sun.com]www.java.sun.com[/url]下載 JDK_1.5.0_18.bin,在ubuntu終端中直接執行該程序,默認會被安裝 到/usr/JDK_1.5.0_18路徑下。在終端中輸入#java–version,如果顯示出java版本信息,說明java安裝成功。
這裏沒有選擇ubuntu的自動安裝,原因主要是有時候下載速度很慢,而且安裝過程有時候會出現問題,反正這樣從 SUN的官網下載安裝也很簡單,呵呵。
4.使用export來設置環境變量:
#export JAVA_HOME=/usr/jdk1.5.0_18
#export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#export PATH=$PATH:$JAVA_HOME/bin
由於因爲其它工作需要的原因,這裏我還安裝了1.6的JDK,所以使用export的方式來動態改變環境變量,而沒有直 接寫到/etc/bash.bashrc中,這個大家可以根據自己的具體情況來選擇。
#export PATH=/usr/local/git/bin:/usr/local/git/libexec/git-core:$PATH(對git工具進行設置,否則無法正 常使用)
二.代碼下載
這裏的所有代碼指定爲Android的cupcake版本,更新日期爲2009年4月8日,這個版本是Android一個相對比較新的 版本。
1.創建工作目錄:
#mkdir /home/android
#cd /home/android
#mkdir bin
2.下載安裝repo版本管理工具:
#curl [url=http://android.git.kernel.org/repo]http://android.git.kernel.org/repo[/url]> /home/android /bin/repo
#cd bin
#chmod a+x repo
由於Android項目官方採用repo來做同步管理,所以這裏只有使用repo纔可以做代碼同步。
3.準備下載Android:
#cd /home/android
#./bin/repo init -u git://android.git.kernel.org/platform/manifest.git –cupcake
通常情況下會出現error提示(如果是以前沒有創建過repo賬戶的話),這個錯誤可以忽略。最後的-cupcake就是 爲了下載cupcake版本,如果不加的話,下載的是master版本,master版本屬於開發測試版本,很多功能還不穩定
4.配置repo帳戶:
#git config --global user.email \"[email=xxxxx@xxxxxxx]xxxxx@xxxxxxx[/email]\"
#git config --global user.name \"xxxxxx\"
郵箱地址填有效郵箱即可,我試過,其實這步跳過也沒有問題。
5.下載源碼:
#repo sync
這個操作就是下載整個Android的源碼到本地,具體花費時間和網速有關,cupcake版本源碼大概1.3G左右。進 入/home/android/可以看到Android的源碼目錄如下:
--repo --主要是同步管理所用到的一系列文件
--bionic --Android編譯過程所需要的一些庫
--bootable --負責啓動和備份的一些文件
--build --最主要的一些makefile和編譯配置文件
--dalvik --經過Google優化了的java虛擬機
--development --開發用的一些文件夾,包括模擬器和工具等
--external --Android工程中引入的外部功能庫
--frameworks --中間件部分
--hardware --和硬件有關的一些支持文件,包括wifi,電信模塊等
--kernel --經過了優化和修改的linux內核
--packages --所有的上層應用包
--prebuild --Android編譯工具所在目錄
--system --一些系統級文件
三.系統和開發工具編譯
1.系統編譯
Android文件系統由於已經自帶了經過優化的交叉編譯工具,並且爲所有的源碼都提供了經過驗證的makefile,所 以系統的整體編譯相對簡單,官方發佈的版本中基本功能都已經包含進了makefile中,但是我下載的版本的中文 的輸入法沒有被引入,這裏做適當修改:
#cd /home/android/build/target/product/
#gedit generic.mk
打開這個文件後,在PRODUCT_PACKAGES中,加入PinyinIME,然後保存退出。這樣在整體編譯的時候就會把中文輸入 法也編譯進system中了。
修改完成後:
#cd /home/android/
#make
第一次進行整體編譯,這個過程大概持續2到3小時,默認情況下,會在/home/android/目錄下生成一個out文件夾 ,所有的編譯生成物都在這一目錄下。如果想更改生成文件的目錄,請參考/build/buildspec.mk.default文件中 的說明和選項,很簡單,相信大家都能看懂。如果編譯過程中出現問題,請自行檢查上面PC工作環境準備部分中是 否哪裏出了問題,就不要在論壇裏反覆問了,因爲這樣的問題應該是自己參考這個帖子後可以完全自己解決的。

2.開發工具的編譯
Android提供了完整的開發工具和交叉編譯工具,這些都包含在了源碼內,所以只要對源碼正確編譯,就可以獲得 豐富的開發工具,並且Android的移植工作也需要這些工具的支持。
編譯Android開發工具的步奏如下:
#cd /home/android/
#make sdk
如果出現無法正常編譯的情況,請檢查JDK1.5.0_18的環境變量配置是否成功。正常情況下最後在/home/android/ 目錄下會生長一個out文件夾。
#cd /out/host/linux-x86/sdk/
可以看到這裏有了一個名叫android-sdk_eng.root_linux-x86的文件夾,這個文件夾基本包含了Android的模擬器 和所有的開發調試工具。打開這個文件夾,可以看到這裏主要由以下幾部分組成:
--add-ones --需要增加的新工具路徑
--docs --關於模擬器和各種開發工具的說明等
--platform --模擬器和開發工具需要的文件
--tools --模擬器和開發工具的應用程序
四.模擬器使用和文件系統提取
1.模擬器使用
進入~/android-sdk_eng.root_linux-x86/tools目錄下,這裏有很多Android的工具,其中模擬器對應的應用程 序是emulator。下面是正確使用模擬器的步奏:
#./android create avd –n NO1 –t 1
這個命令會進入創建avd的過程,按自己的需要做出一些選擇後,名稱爲NO1的avd就創建成功了,以後可以通過這 個創建的avd來使用模擬器。1.4之前的版本不需要這樣創建,1.5版本後不正確創建是無法使用的。
#./android list avd
輸入命令來檢查創建是否成功,如果成功會列出來。
#./emulator –avd NO1
啓動剛纔創建的名爲NO1的模擬器,使用的內核,文件系統等均使用默認的,即~/android-sdk_eng.root_linux- x86/platform/路徑下的內核和文件系統。沒什麼問題的話,我們就可以看到Android操作系統的虛擬界面了。
2.使用自己編譯的系統
Android可以運行在開發板上的文件系統的提取需要依靠模擬器,具體的操作步奏如下:
#cd /home/android/out/ android-sdk_eng.root_linux-x86/tools/
#./mksdcard –l 200M /home/sdcard.img
這裏使用mksdcard開放工具在/home目錄下建立一個200M的sdcard.img,用於模擬器中數據和外部數據的交互,虛 擬SD卡的大小不應該小於100M,否則在後期的文件系統打包過程中,有可能會有SD卡存儲空間不夠的問題。
#./android create avd –n cupcake –t –c /home/sdcard.img 1
創建一個名爲cupcake的,附帶有sdcard的虛擬設備。
#./emulator –avd cupcake –sysdir /home/android/out/target/product/generic –data /home/android/out/target/product/generic/userdata.img -ramdisk /home/android/out/target/product/generic/ramdisk.img –kernel /home/android/prebuild/android- arm/kernel/kernel-qemu
使用名爲cupcake的虛擬設備啓動模擬器,並規定系統,數據等的映象文件路徑,模擬器內核採用 prebuild/android-arm/kernel/kernel-qemu。當然也可以使用自己編譯的內核鏡像,關於如果編譯內核的問題會 在以後陸續發貼說明。
打開一個新的終端進行操作:
#cd /home/android/out/ android-sdk_eng.root_linux-x86/tools/
#./adb remount
這裏使用adb工具的remount選項來使模擬器中的system目錄權限改爲可讀寫。
#./adb push tar /system/bin
這裏使用adb工具的push指令將提前使用busybox做好的tar應用程序加入到模擬器的/system/bin目錄下。關於 busybox的使用這裏不作介紹,網上太多了,呵呵
#./adb shell
這裏使用adb工具進入到模擬器的shell中。
進入到Android模擬器的shell中操作如下:
#tar xvf /sdcard/system.tar /system
#tar xvf /sdcard/userdata.tar /data
這裏使用前面加入到模擬器中的tar應用程序來對system和data目錄下所有內容進行打包,並存儲到sdcard裏。操 作結束後,進入sdcard目錄下查看是否有了system.tar和userdata.tar文件,如果有,則證明打包成功。  
#exit
退出shell,並關閉模擬器。
#mount –o loop sdcard.img /mnt
#cd /mnt
這裏將虛擬SD卡掛載在/mnt目錄下,進入/mnt目錄後,就可以將system.tar和userdata.tar拷貝出來,文件系統的 提取完成。

經過測試,發現其實使用android提供的mkyaffsimage直接對/out/target/product/generic/system目錄進行打包 ,製作出system.img也完全可以使用,不過不知道userdata.img如何製作,希望有人可能指點。使用 mkyaffs2image製作文件系統映像時要注意的是一些配置文件的權限問題,比如/system/usr/keylayout下的文件 權限就有問題,需要修改,否則生成的映像在模擬器中加載後,鍵盤等無法正常使用。
最後,要說的是,新加入android的朋友們遇到問題我個人建議最好不要立刻就問,畢竟是個80%以上都開源的系 統,不妨自己嘗試解決問題,到論壇逛逛,在網上搜索下,或者自己讀下源碼,都是一種提高。拿到的資源其實都 是一樣的,學到的東西,得到的鍛鍊卻是不同的。

xuhj 發表於 2009-4-21 18:57
LZ在創建工作目錄在/home路徑下新建android目錄,個人看法覺得不妥,Linux的“潛規則”裏,這裏是放置非ROOT用戶的home。

hercules 發表於 2009-4-21 21:34
》這裏沒有選擇ubuntu的自動安裝,原因主要是有時候下載速度很慢,而且安裝過程有時候會出現問題,反正這樣從 SUN的官網下載安裝也很簡單,呵呵。
這裏是因爲你軟件源沒選對,讓系統自動找一個速度最快的就可以了。我找到一個是加拿大的一個服務器,平均速度大概在200K左右

xuezei117 發表於 2009-4-23 16:41
工作目錄創建在/home下的原因很簡單,因爲是公司的工作棧,規定統一在/home目錄下建立開發工程,謝謝,何況個人認爲即使建立在這個目錄下也無不可,沒人規定開發一定要以root身份來進行,尤其對於工作棧這樣多用戶共用的情況下

xuezei117 發表於 2009-4-23 16:43
軟件源選擇問題我沒有嘗試過,相信大部分人都用的和我一樣的方式,從sun上下載JDK一樣很快,沒有任何問題,而且版本完全可控,沒有任何問題

liouville 發表於 2009-4-24 10:42
怎麼我使用這個命令不能創建呢?
#./android create avd –n NO1 –t 1
=====
root@liouville:~/liouville/Mydroid/cupcake/out/host/linux-x86/sdk/android-sdk_eng.root_linux-x86/tools# ./android creat avd -n NO1 -t1

Usage:
android --list [target|vm]
android --create --target <target id> --name <name>

Options:
-l [target|vm], --list [target|vm]
Outputs the available targets or Virtual Machines and their Ids.

xuhj 發表於 2009-4-24 13:28
回 3樓(xuezei117) 的帖子
有些奇怪,我沒提到要用root來開發,而且我們都是儘量避免使用這大權限的用戶。當然你可以把這個目錄放在任何路徑下,我只是提醒這是個“潛”規則而已,呵呵。

xuezei117 發表於 2009-4-24 14:31
那你的意思應該放在什麼路徑下最好?

xuezei117 發表於 2009-4-24 14:36
回 5樓(liouville) 的帖子
再次嘗試,發現是沒有問題的 ./android create avd -n 111 -t 1
注意最後面的符號是阿拉伯數字1,不是英文
如果還不對,可以使用./android list target 來確認下你的版本的target號是多少

hercules 發表於 2009-4-24 21:01
回 5樓(liouville) 的帖子
早一點的虛擬機是這麼創建的(三月份的Source code)
./android vm -t 1 -n your_name -s your_skin
最新的代碼纔是
./android create avd -t 1 -n your_name -s your_skin

create avd不行的話試試vm

biaji 發表於 2009-4-24 23:33
請問如果我想在內核中加入netfilter支持應該修改哪個配置文件後編譯才行呢?

niuyi 發表於 2009-4-27 12:13
LZ, 我按照你的步驟做到repo sync這一步,已經開始下載了.可是到了
remote: Compressing objects: 100% (31/31), done

這裏,就一直停下了,我等了一晚上,也還是停在這裏.


請問,這是怎麼回事?謝謝.
我的EMAIL:[email protected]
請你也留下你的聯繫方式吧?

xuezei117 發表於 2009-4-27 13:31
回 10樓(biaji) 的帖子
在make menuconfig時,在配置選項中選擇Networking options→IP:Netfilter Configuration,基本都在這裏哈

niuyi 發表於 2009-4-27 22:10
我知道是什麼問題了。

xuezei117 發表於 2009-4-28 15:59
什麼問題?

xiangmocheng 發表於 2009-6-10 11:15
很好的帖子~實踐中~
發佈了18 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章