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


本文轉至  http://blog.csdn.net/yanzi1225627/article/details/9263097

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

 

  1. # A fatal error has been detected by the Java Runtime Environment:  
  2. #  
  3. #  SIGSEGV (0xb) at pc=0x40362d33, pid=12195, tid=2835454784  
  4. #  
  5. # JRE version: 6.0_45-b06  
  6. # Java VM: Java HotSpot(TM) Server VM (20.45-b01 mixed mode linux-x86 )  
  7. # Problematic frame:  
  8. # V  [libjvm.so+0x158d33]  
  9. [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

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

 

  1. echo "board=" > out/target/product/generic/android-info.txt  
  2. Installed file list: out/target/product/generic/installed-files.txt  
  3. build/tools/fileslist.py out/target/product/generic/system > out/target/product/generic/installed-files.txt  
  4. Target system fs image: out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img  
  5. out/host/linux-x86/bin/mkyaffs2image -f  out/target/product/generic/system out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img  
  6. Install system fs image: out/target/product/generic/system.img  
  7. out/host/linux-x86/bin/acp -fp out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img out/target/product/generic/system.img  
  8. true  
  9. out/host/linux-x86/bin/mkbootfs out/target/product/generic/root | out/host/linux-x86/bin/minigzip > out/target/product/generic/ramdisk.img  
  10. out/host/linux-x86/bin/mkyaffs2image -f  out/target/product/generic/data out/target/product/generic/userdata.img  
  11. true  


編譯完成后在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代碼,下一步就是下載內核代碼,並將編譯的鏡像安到模擬器上!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM