Ubuntu12.04編譯Android4.0.1源碼全過程—–附wubi安裝ubuntu編譯android源碼硬碟空間不夠的問題解決

來源:互聯網
上載者:User

昨晚在編譯源碼,make一段時間之後報錯如下:

# A fatal error has been detected by the Java Runtime Environment:##  SIGSEGV (0xb) at pc=0x40362d33, pid=12195, tid=2835454784## JRE version: 6.0_45-b06# Java VM: Java HotSpot(TM) Server VM (20.45-b01 mixed mode linux-x86 )# Problematic frame:# V  [libjvm.so+0x158d33][error occurred during error reporting (printing problematic frame), id 0xb]

        經過研究是硬碟空間不夠的問題,大爺的。也難怪,我原先用wubi安裝的ubuntu12.04,分了一個單獨的硬碟30G大小。本以為空白間夠用,下載好源碼後空間只剩6G了,也難怪。參考點擊開啟連結http://www.eoeandroid.com/forum.php?mod=viewthread&tid=245968這裡記憶體要1G,硬碟空間要大於40G最好。

      為此卸載了ubuntu,然後xp下划了70G的硬碟給ubuntu,但wubi安裝時最大仍然是只能選擇30G.我擦,這什麼意思。為嗎不能弄大點。後來看資料說有個LVPM可以修改ubuntu的大小,但根據資料顯示LVPM只能支援ubuntu早期的版本,好像是10.04就不中了。後來找到ubuntu有個自己的工具 連結:https://help.ubuntu.com/community/ResizeandDuplicateWubiDisk  叫wubi-resize-1.7.tar.gz 就是修改硬碟空間大小的,原理和LVPM一樣。興緻勃勃下好後,想分個60G空間大小,結果顯示最大參數為32G. 我擦,太坑爹了!看來wubi安裝缺點有很多啊,幸好找到http://www.eoeandroid.com/forum.php?mod=viewthread&tid=192736&page=1#pid1738873    可以把android源碼放到xp下的其他盤然後編譯,在/media/..........目錄。

           為此,從頭開始記下編譯步驟:

1,由於重弄的ubuntu原來的android開發環境麼有了,因此第一步安JDK吧,必須是1.6版本的,1.7的不中。下載連結:http://www.oracle.com/technetwork/java/javase/archive-139210.html  參考南都布衣的文章,選用1.6.0_29版本。建立/usr/local/android目錄,為以後安裝android作準備。JDK也解壓縮到這裡。修改/etc/profile檔案裡添加:

export JAVA_HOME=/usr/local/android/jdk1.6.0_29
export PATH=$PATH:$JAVA_HOME/bin

然後source /etc/profile一下。輸入java -version來檢查java裝成功了麼有。一般出現1.6.0_29就表示成功了。但文檔裡還說要安javac 和 jar。我猜測原因可能是,儘管java裝好了,但執行update-alternatives --config java的時候會說無java的選項,所以要update-alternatives --install再install一下。

root@ubuntu:/usr/local/android# update-alternatives --install /usr/bin/java java /usr/local/android/jdk1.6.0_29/bin/java 300

會提示:update-alternatives: 使用 /usr/local/android/jdk1.6.0_29/bin/java 來提供 /usr/bin/java (java),於 自動模式 中。

對javac和jar做相同的處理,命令為:

update-alternatives --install /usr/bin/javac javac /usr/local/android/jdk1.6.0_29/bin/javac 300

update-alternatives --install /usr/bin/jar jar /usr/local/android/jdk1.6.0_29/bin/jar 300

此時,在update-alternatives --config java就會顯示有版本資訊了,當同時有多個jdk版本時,這個設定就是非常重要的。

2,下載需要的包:我主要是參考這個   :

sudo apt-get install git-core gnupg flex bison gperf build-essential \  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \  libgl1-mesa-dev g++-multilib mingw32 tofrodos \  python-markdown libxml2-utils xsltproc zlib1g-dev:i386

但奇怪的是如果我整個粘貼到終端會啥東西都裝不了,如果一行一行的粘貼過去則還能安裝,這點要注意啊。

3,下載android源碼,參考前篇,我已經下載好了。壓縮後1.9G大小,有時間上傳到網盤。解壓後是4.7G大小。現在將它放在/media/娛樂/盤符下面,這是xp下的F盤,有50G大小。

4,預設的gcc g++版本為4.6.3,  將其改為4.4.步驟:

sudo apt-get install gcc-4.4
sudo apt-get install g++-4.4
cd /usr/bin
ls -l gcc*
sudo mv gcc gcc.bak
sudo ln -s gcc-4.4 gcc
ls -l g++*
sudo mv g++ g++.bak
sudo ln -s g++-4.4 g++
gcc -v
g++ -v

5,python的版本是2.5-2.7,預設的是2.7 沒問題。JDK版本為1.6也麼問題。

6,參考這裡http://www.59a.cn/1182.html設定ccache加快編譯速度。預設的ccache在~/.ccache檔案夾下。預設的是1G大小。我在/home/yan/目錄下建立一個cache檔案夾用來做緩衝。gedit ~/.bashrc裡面新增的內容是:

export USE_CCACHE=1
export CCACHE_DIR=/home/yan/cache

           然後設定cache的大小,在androidSource檔案夾下,也即工程檔案夾下要make的地方終端輸入命令:prebuilts/misc/linux-x86/ccache/ccache -M 5G 官方推薦的是50-100G,但我wubi安裝的ubuntu總共才30G,剩餘空間也就24G,因此設為5G.我想這裡也可以把ccache的目錄設定在xp下的盤上。【後記,這一步我忘了運行最後那個設定ccache的大小的命令,結果編譯時間/home/yan/cache檔案夾下的內容大約為1G,由此我推測預設的cache為1G大小。通過設定這個應該可以提高編譯速度】

關於ccache的使用提高編譯速度,可以參考如下2篇:

1,http://blog.csdn.net/liucheng2009/article/details/7874331

2,http://blog.csdn.net/qq295445028/article/details/7776299

7,參考這裡http://www.eoeandroid.com/forum.php?mod=viewthread&tid=192736&page=1#pid1738873 安裝兩個軟體:

sudo apt-get install ntfs-3g      //這個12.04已經有了。
sudo apt-get install ntfs-config  //這個是個圖形介面的NTFS許可權配置程式。

     然後終端輸入:sudo ntfs-config,oh shit!出現了https://bugs.launchpad.net/ubuntu/+source/ntfs-config/+bug/1044028上面的bug,大爺的!不管了,這一步咱略過吧。後來我又把ntfs-config給卸載了,因為它總是報錯。apt-get remove ntfs-config。事實上,在系統內建了ntfs-3g的情況下,就可以對xp下的盤進行讀寫了。因此這一步可以省略。

8,按照官方的提示,在androidSource路徑下,終端依次執行如下命令:
source build/envsetup.sh
lunch full-eng
make -j4
強烈建議:原文說最後一條命令使用 make showcommands,這樣可以顯示編譯命令,使得編譯的時候,螢幕沒有輸
出的時候,不會感覺無聊。但我測試,我就是用了make showcommands結果編譯了整整10個小時才編譯完。因此最好用make -j4這個命令進行編譯,這個4等於cpu核心數*2.如果是2核就寫-j4,如果是4核就-j8.這樣可以大幅度提高編譯速度。

       然後就是漫長的等待了,我大約編譯了10個多小時,半夜4點起來看才編譯完,頭一天下午5點開始編譯。快12個小時了大爺的,之所以時間這麼長,我想是兩方面的失誤造成的:

1,設定了ccache,但是忘了設定大小了,預設的1G來處理的

2,最後的編譯用的是make showcommands命令,沒有用make -j4

終端在編譯完成後最後的輸出是:

echo "board=" > out/target/product/generic/android-info.txtInstalled file list: out/target/product/generic/installed-files.txtbuild/tools/fileslist.py out/target/product/generic/system > out/target/product/generic/installed-files.txtTarget system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.imgout/host/linux-x86/bin/mkyaffs2image -f  out/target/product/generic/system out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.imgInstall system fs image: out/target/product/generic/system.imgout/host/linux-x86/bin/acp -fp out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img out/target/product/generic/system.imgtrueout/host/linux-x86/bin/mkbootfs out/target/product/generic/root | out/host/linux-x86/bin/minigzip > out/target/product/generic/ramdisk.imgout/host/linux-x86/bin/mkyaffs2image -f  out/target/product/generic/data out/target/product/generic/userdata.imgtrue

編譯完成後在out/target/product/generic檔案夾下有3個鏡像檔案:ramdisk.img system.img userdata.img,如下:

       這裡記錄下編譯前後相關檔案夾的大小,編譯前源碼檔案夾的大小是4.7G,壓縮後是2G.編譯完成後out檔案夾的大小是12.3G,整個源碼檔案夾的大小是16.7G.真耗空間啊!難怪http://www.eoeandroid.com/forum.php?mod=viewthread&tid=245968這裡說,記憶體大於1G,硬碟大於40G.

       看來wubi安裝的ubuntu在無法實質擴大安裝空間的前提下,只能在掛載的xp盤下進行編譯。終端輸入命令:df -h查看磁碟使用方式:

         這裡已經自動掛載好了,其中的/dev/sda1是我的c盤,然後sda5 sda6 sda7 分別是D E F盤,sda8是我的最後一個盤也是裝ubuntu的盤。我把源碼放到了娛樂(F盤)進行編譯的。之前還擔心檔案夾有中文會不會報錯,看來多慮了。

        終端切換到root,可以通過如下命令自由卸載和掛載:

root@ubuntu:~# umount /dev/sda7 /media/娛樂
umount: /media/娛樂 未掛載
root@ubuntu:~# mount /dev/sda7 /mnt/
root@ubuntu:~# cd /mnt/
root@ubuntu:/mnt# ls
androidSource  androidSource_4_0_1.tar.gz  RECYCLER  System Volume Information
這樣用xp下的盤就跟用linux下的檔案夾一樣,盡情編譯!

編譯過程沒出啥問題,但還是將相關問題的解決方案附錄如下:

1,下載編譯android源碼(4.0.3)核心(ubuntu11.04)

2,Ubuntu11.10(32位)編譯android常見錯誤(30種常見的)

3,android4.0源碼編譯調試出錯/bin/bash: prebuilt/linux-x86/toolchain/arm...

4,南都布衣——[Android]Ubuntu12.04下編譯和下載Android4.0.3源碼:http://wenku.baidu.com/view/626d4a2258fb770bf78a552f.html

5,Ubuntu 12.04 編譯Android 4.2 源碼 --http://www.59a.cn/1182.html

       根據上面的連結2,鏡像產生在out/target/product/generic下:android源碼編譯後得到system.img,ramdisk.img,userdata.img映像檔案。其中, ramdisk.img是emulator的檔案系統,system.img包括了主要的包、庫等檔案,userdata.img包括了一些使用者資料,emulator載入這3個映像檔案後,會把 system和 userdata分別載入到 ramdisk檔案系統中的system和 userdata目錄下。

      根據連結1還要下載kernel代碼,下一步就是下載核心代碼,並將編譯的鏡像安到模擬器上!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.