Android 源碼下載, 編譯及一些錯誤處理

Android 源碼下載及編譯後需要20G硬盤空間
一:環境配置
1.安裝git工具:
sudo apt-get install git-core gnupg
2.安裝Java jdk:
可以通過官網下載,自己配置環境。也可通過命令行操作進行下載
sudo add-apt-repository ppa:ferramroberto/java
sudo apt-get update
sudo apt-get install sun-java6-jre sun-java6-plugin
sudo apt-get install sun-java6-jdk 
3.安裝依賴包:
sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl
4.調試工具:sudo apt-get install valgrind
二:開始下載Android源碼
1.下載repo工具:
wget https://dl-ssl.google.com/dl/googlesource/git-repo/repo
chmod 777 repo
cp repo /bin/
2. ~/Andriod$ mkdir Android
   ~/Andriod$ cd Android
   ~/Andriod$ repo init -u https://dl-ssl.google.com/dl/googlesource/git-repo/repo
   ~/Andriod$ repo sync
開始下載,可能需要2~3天時間,如果關機之後,下次進入Android目錄,接着執行 repo sync,接着下載。中間可能會有中斷,在網上找了個腳本repo.sh,可以一直下載,內容如下:
repo sync
while [ $? -ne 0 ]
do
    repo sync
done
或者:
#!/bin/bash
command="repo sync"
$command
result=$?
echo "result = "$result
until [ $result -eq 0 ]
do
echo "retry"
$command
result=$?
done
三:編譯源碼
1:~/Andriod$ make
等待比較久,如果出現錯誤,可查看這裏
2:編譯sdk1
切記先執行 ~/Andriod$ source ./build/envsetup.sh
執行之後會有一些額外的命令可以使用如:
名稱 說明
croot 切換到源碼樹的根目錄
m 在源碼樹的根目錄執行 make
mm Build 當前目錄下的模塊
mmm Build 指定目錄下的模塊
cgrep 在所有 C/C++ 文件上執行 grep
jgrep 在所有 Java 文件上執行 grep
resgrep 在所有 res/*.xml 文件上執行 grep
godir 轉到包含某個文件的目錄路徑
printconfig 顯示當前 Build 的配置信息
add_lunch_combo 在 lunch 函數的菜單中添加一個條目 
這裏可參考一篇博文,介紹Android Build 系統:http://www.ibm.com/developerworks/cn/opensource/os-cn-android-build/index.html#iratings
這一步很重要,要不然在編譯make sdk中會出現問題
~/Andriod$ lunch sdk-eng
~/Andriod$ make sdk
編譯過程中可能會遇到的問題。
   問題一:找不到bios.bin和vgabios-cirrus.bin文件
   couldn't locate source file: usr/share/pc-bios/bios.bin
   couldn't locate source file: usr/share/pc-bios/vgabios-cirrus.bin
   注意,這裏的usr/share目錄指的是~/Android/out/host/linux-x86目錄下的usr/share目錄,修改辦法是複製~/Android/prebuilt/common下的pc-bios文件夾到~/Android/out/host/linux-x86/usr/share即可:
     ~/Android$ cp ~/Android/prebuilt/common/pc-bios ~/Android/out/host/linux-x86/usr/share
    問題二:找不到ddmlib-tests.jar、 ninepath-tests.jar 、common-tests.jar 和sdkuilib-tests.jar文件
    在~/Android/out/host/linux-x86/framework這個目錄下,可以找到以下幾個文件common.jar、ddmlib.jar、ninepatch.jar、sdkuilib.jar這四個文件,然後將它們分別複製一份,並重命名,命名的原則很簡單,就是在原有的名字後面跟上-tests即可。
四:將編譯好的Android鏡像放到模擬器
1:設置環境變量:
~/Android$ export PATH=$PATH:~/Android/out/host/linux-x86/bin
~/Android$ export ANDROID_PRODUCT_OUT=~/Android/out/target/product/generic
其中,~/Android/out/host/linux-x86/bin有我們要執行的emulator命令,而~/Android/out/target/product/generic是Android鏡像存放目錄
2:運行模擬器
模擬器運行需要四個文件,分別是Linux Kernel鏡像zImage和Android鏡像文件system.img、userdata.img和ramdisk.img。執行emulator命令時,如果不帶任何參數,則Linux Kernel鏡像默認使用~/Android/prebuilt/android-arm/kernel目錄下的kernel-qemu文件,而Android鏡像文件則默認使用ANDROID_PRODUCT_OUT目錄下的system.img、userdata.img和ramdisk.img,也就是我們剛剛編譯出來的鏡像問題。
~/Android$ emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img
出現問題:qemu: could not load initrd 'ramdisk.img'
網上有更改權限解決: chmod 777 ~/out/target/product/generic
chmod 777 ~/out/target/product/generic/ramdisk.img

這裏還是不行,所以就把 -ramdisk ramdisk.img 去掉,結果運行成功

單獨編譯Android源代碼中的模塊:
使用mmm命令來編譯指定的模塊,例如Email應用程序:
~/Android$ mmm packages/apps/Email/
編譯完成之後,就可以在out/target/product/generic/system/app目錄下看到Email.apk文件了。Android系統自帶的App都放在這具目錄下。另外,Android系統的一些可執行文件,例如C編譯的可執行文件,放在out/target/product/generic/system/bin目錄下,動態鏈接庫文件放在out/target/product/generic/system/lib目錄下,out/target/product/generic/system/lib/hw目錄存放的是硬件抽象層(HAL)接口文件
編譯好模塊後,還要重新打包一下system.img文件,這樣我們把system.img運行在模擬器上時,就可以看到我們的程序了。
~/Android$ make snod

~/Android$ emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img


參考:http://blog.csdn.net/luoshengyang/article/details/6559955
    
發佈了51 篇原創文章 · 獲贊 7 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章