Android源碼編譯過程詳述

來源:互聯網
上載者:User

標籤:

首先說一下,編譯Android所用的系統,目前ubuntu是比較好的平台,也是官方推薦的,但具體版本,說的都比較少,為了避免大家走彎路,我 這裡說一下,最好的就是ubuntu 8.10,他所帶有的各個編譯器都是最合適的,Android編譯對編譯器的要求近乎於苛刻。網上總說以8.04作為編譯的系統,但我在這裡說,8.04 絕不是什麼最好的系統。下面我會一一說明。

  Android編譯主要包括對C,C++,的編譯,這裡主要是GCC,G++,編譯器,針對ARM平台的編譯器,主要是arm-eabi-編譯器, 還有針對JAVA的編譯器,就是JDK,對GCC,G++最好的版本是4.3版,ubuntu 8.04的gcc版本是4.2.4,並且通過apt-get install沒有gcc4.3的包,這裡鬱悶了我很久,最後通過下載8.10的包才完成的GCC升級,順帶說一下,ubuntu apt-get工具的源添加方法,在/etc/apt/sourcelist裡面是源的地址,在這裡加入8.10版本的升級源,就可以通過apt安裝下載 8.10的應用程式了,但由於在8.04下升級不能達到GCC4.3,正常情況下,對不同版本的系統軟體升級是不能使用別的版本的軟體的,所以這樣做不知 道有什麼不好的結果,所以選擇作業系統最好是8.10,如果是9以後的版本就需要降級,就是安裝低版本的程式,通過在/usr/bin下修改軟連結、或者 apt-alternatives --config 來選擇,對GCC的連結,通過ln -sf gcc-4.3 gcc,修改,對JDK需要通過apt-alternatives --config java,apt-alternatives --config javac,apt-alternatives --config javah,進行修改,選擇JDK1.5版本。

  首先下載Android的原始碼,Android的原始程式碼控制工具是使用git,配合repo來實現的,安裝git,curl ; /home/android /bin/repo,通過repo init -u選擇Android代碼進行下載,這裡在下載時,最好使用-b選擇下載的版本,主要因為預設下載的是master branch就是正在編寫、升級的版本,說白了屬於測試版,對編譯Android來說,沒什麼好處,最好通過-b指定穩定版本進行下載,-b後面可以是 cupcake/eclair等等,這裡需要耐心等待,一般下載5,6個鐘頭就能下載完畢,以我的經曆,一般是早上6點鐘到上午10點左右速度都很好的, 其他時間速度不行。網路經常斷,通過XXXX修改。

  接著是編譯環境的配置,編譯Android需要安裝很多軟體,apt-get install git-core gnupg sun-java5-jdk flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zlib1g-dev,這些是官方說明中需要的,可能還有fakeroot,apt-get install valgrind ,反正這裡一定要確保完整安裝這些工具,否則編譯會出很多莫名其妙的問題。

  接著就可以make了,首先檢查一下gcc,jdk版本是不是gcc-4.3,JDK1.5版本,接著修正環 境變數,export JAVA_HOME=/yourJDKpath/,ANDROID_JAVA_HOME=$JAVA_HOME,將這兩句加入/etc /environment中,重啟機器,將環境變數啟用。

  [android]編譯時間出現 /usr/include/gnu/stubs.h:7: fatal error: gnu/stubs-32.h: No such file or directory 錯誤資訊 

  缺少libc開發包,安裝即可: apt-get install libc6-dev-i386

  [android]編譯時間出現/usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.5/../../../libz.so when searching for -lz錯誤資訊 

  缺少lib32z1-dev,安裝即可:apt-get install lib32z1-dev

  引自:

  host Executable: acp (out/host/linux-x86/obj/EXECUTABLES/acp_intermediates/acp)
  /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.3/libstdc++.so when searching for -lstdc++
  /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.3/libstdc++.a when searching for -lstdc++
  /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.3/libstdc++.so when searching for -lstdc++
  /usr/bin/ld: skipping incompatible /usr/lib/gcc/x86_64-linux-gnu/4.4.3/libstdc++.a when searching for -lstdc++

  解決:

  sudo apt-get install g++-multilib

  GL/glx.h: No such file or directory)

  sudo apt-get install libgl1-mesa-dev

  接著就可以make了,這裡著重說一下編譯可能遇到的錯誤,如果你遇到的錯誤在網上找不到,那麼有可能是在repo解壓過程中對檔案產生的錯誤,將Android src目錄下除.repo目錄外,都刪除,重新執行repo sync解壓之後再make。其它的錯誤見這 篇文章,基本各種問題都進行了說明,補充一點就是,在duplicate entry 問題時,正常find都找出的是2個,直接刪除一個就好了,但有幾個是find出4項,這裡需要仔細看一下,這4項中倆倆類似,只是路徑中某個檔案夾不 同,刪除時,刪除那個最進階目錄不同的兩個中的一個即可。別刪錯咯。

  make一次我在虛擬機器上,單核來跑,一般長達3個小時左右需要耐心等待,如果編譯中出現錯誤,看一下,解決後,一般不用make clean,再make的方式,直接make,一般是可以由錯誤點繼續編譯的,節省時間。


Android源碼編譯過程詳述

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.