1. 程式人生 > >Android原始碼的編譯(4.4.2)

Android原始碼的編譯(4.4.2)

    今天主要為大家敘說下Android原始碼的編譯,其實一開始說起Andriod原始碼的編譯,我的心裡就沒底,有一種很懼怕的感覺,因為,我就想,那麼龐大的一個系統,如果出了問題,我該怎麼解決呢,還好,度娘和google哥哥給我提供了不少幫助(這其實得益於先驅們的貢獻),因此這個過程中,他們為我解決了不少問題的,下面我們開始來編譯原始碼。

   首先你要知道,編譯Android原始碼不是HelloWorld,出現再多的錯誤,你要泰然處之,倒是不出現錯誤,你才覺得奇怪,你想想,你現在所用的系統,windows   or   mac   or   linux  ,那麼你編譯android原始碼會遇到什麼問題呢?第一,你所用的平臺就是個問題,如果用windows的使用者,那麼你就需要裝個linux虛擬機器,你可以選擇VMWARE來安裝linux或者直接再windows上裝CYGWIN,這樣就能模擬linux下的操作;而如果你用的是linux或者mac系統,那麼先恭喜你,android的官網上提供了這兩種系統的的編譯方式,你可以根據步驟來即可。

   我這裡用的是ubuntu系統,一開始也是再mac系統上編譯的,可是遇到不少問題,而且聽網上的介紹,一般都是建議再ubuntu下編譯,所以也就沒再去管mac下編譯的出錯問題,還望有在mac上編譯成功的大牛們給點建議或給個教程,萬分感謝!好了,廢話不多說了,現在開始。

   我分別在兩種情況下進行了編譯,一個是ubuntu10.04 64位的虛擬機器上,我的ubuntu是裝載VMWARE上的,另一個是在主機上裝的ubuntu12.04 64位,其實兩種沒多大差別,所

以這裡就一起來敘說了。

   編譯原始碼,你要有一個堅實可靠的環境,首先你先得檢查你得硬碟,你得記憶體是否符合需求,系統最好是64位,雖說android原始碼中得其中有些比較早得版本是可以在32位上編譯得(沒有證實,是聽網上一些意見說得),但是我非常建議大家用64位機器,這樣能避免不少錯誤;其次,你要在真機上裝64位系統,你要保證4G記憶體;在虛擬機器上,我得10.04ubuntu是2G記憶體,但不要是1G,不然會出現錯誤,你可能很難找出錯誤得原因;最後,硬碟的空間得足夠,android得各個版本的原始碼的大小是不同的,我這裡的android4.4.2的原始碼是9.2G,然後編譯好了,一共是34.5G的檔案(包括原始碼),所以你至少要保證有40G的額外空間吧(這裡是針對我的4.4.2的編譯,當然,如果是早起版本的話,就不需要那麼大,不過反過來說,那麼大肯定不會報空間不足的錯誤),如果條件允許的話,你最好再大點(現在的硬碟一般都能滿足要求,當然,在你準備編譯之前,該騰的空間肯定已經是騰出來了的);如果有人說,我實在不夠,電腦上已經放滿了Objects,那麼這時候還有一種辦法,就是拿一個足夠空間的行動硬碟來,編譯的時候把生成的檔案寫在你的移動硬盤裡,甚至你可以把你的原始碼一起放在行動硬碟,然後編譯的時候,也是在你的行動硬碟上編譯,我就是這麼做的,但是這樣的話編譯速度就取決於你的的硬碟讀寫速度了,與成功率當然還是無關的,反正你一直讓你的機器去Run就行了。

    (上述說到的如果在原始碼在行動硬碟中,你也想在行動硬碟上編譯,那麼你把你的硬碟連線上電腦後,就需要把你的硬碟掛載到本地,為什麼要掛載呢?有人會問,不是直接在硬碟中讀寫嗎?那為什麼還要掛載?下面的過程中我會解釋這個問題,請大家先忍耐下。。。)

     好了,硬體的問題解決了,接下來就剩下軟體問題了,在make之前,你需要完成下面的操作:

     1. 將android原始碼中下的所有檔案,資料夾都加上可執行的許可權,因為在編譯過程中,你會遇到Permission Denied的錯誤,這是因為有些可執行檔案在執行過程中需要可執行的許可權,可是,我怎麼知道哪些檔案需要什麼許可權呢,乾脆一不做,二不休,我就把android原始碼目錄下的所有檔案都加上可執行的許可權,那麼後續就滿血復活啦,只要敲擊以下命令即可:

      sudo chmod -R 777 *

    2. 上面的1問題中所說的相信大家能理解,可是這裡,用行動硬碟編譯的朋友們可能會遇到一個問題:明明執行了上面的命令,卻為什麼沒有反應呢,ls -l  查詢了下,以前怎麼樣,現在還是怎麼樣,經過查證,原來是你無法修改行動硬碟的可讀可寫可執行的許可權,更細節的原因本人也不知道,那麼這時候我就選擇掛載,把盤中的內容掛載到本地,這樣,相當於在本地對行動硬碟的原始碼做了一個對映,就像指標一樣,我修改本地就如同修改行動硬碟中的東西一樣,然後再執行上述命令,就成功了,到這裡,大家應該明白了,我為什麼要掛載了吧!

   怎麼掛載呢?在你的目錄的一個可用的位置新建一共目錄,比如:mkdir  android

   然後,df  -h  查詢你的磁碟的目錄,我的磁碟是/dev/sda1

   最後,敲入命令:mount -o umask=0000 /dev/sda1  /home/pro/android就可以了,下面你訪問android就等於是在訪問你的行動硬碟了

    3. 好了,終於步入正規了,下面就可以按官網所說的來一步步做吧,

      

      這裡是要裝JAVA執行環境,但是不能根據他的來,因為他的這個安裝jdk7的是對應最新的android原始碼分支的(android原始碼5.0版本),我們這裡編譯的是android4.4.2,所以用的jdk6,如果你不裝java執行環境,編譯的時候也會報錯,你可能這時候會把openjdk-7-jdk改稱openjdk-6-jdk,但是我這麼做後又遇到了問題,提示說不能用openJDK,需要用oracle官方的jdk6,所以只好去老老實實地去oralce官網下載jdk6了,果然,那樣就對了(這裡,我不知道這個錯大家會不會跟我一樣發生,如果有人沒有這個錯,那麼就繼續編譯吧,沒什麼問題地);

     其實,這裡配置Java的時候會有一點小的問題,如果現在不注意這個問題,那麼到後面編譯的時候一直會出現莫名其妙的錯誤的。

     假如你一開始安裝的不是Java1.6,那麼這時候你係統預設就不會去找java1.6的東西,即使你把配置好了java1.6的環境變數,所以你要通過以下的方式來配置:

$ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_45/bin/java 1

$ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_45/bin/javac 1

$ sudo update-alternatives --install /usr/bin/javaws javaws /usr/lib/jvm/jdk1.6.0_45/bin/javaws 1

$ sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.6.0_45/bin/jar 1

$ sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.6.0_45/bin/javadoc 1

$ sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.6.0_45/bin/javap 1  (EDIT - This is needed to compile Kit Kat 4.4)

配置好後再來選擇所要用的java1.6的環境:

$ sudo update-alternatives --config java

$ sudo update-alternatives --config javac

$ sudo update-alternatives --config javaws

$ sudo update-alternatives --config jar

$ sudo update-alternatives --config javadoc

$ sudo update-alternatives --config javap  (EDIT - This is needed to compile Kit Kat 4.4)

到此為止,java環境算是安裝好了

     4. 安裝好JAVA環境後,就需要裝一些相應地包,如下圖所示,



5.好了,環境地初始化都完成了,下面就正式編譯原始碼,



到這裡,剩下地就需要神地等待,過程中不保證會沒一點錯誤,有的話你就趕緊度娘 or google了

如果成功了,最後一步 ,你就可以光榮地啟動你的模擬器了,怎麼啟動,網上的說法各一,一查便是,這裡就不說了!!!

以上是小弟實踐的整個過程,求各位大哥,大牛多多提意見,多多批評~

相關推薦

android原始碼編譯ubuntu16.04 64位

編譯步驟 1. 原始碼下載; 2. 構建編譯環境; 3.編譯原始碼; 4.執行. 編譯之前首先要下載和安裝repo和gitt工具。 repo和git Google採用Git對AOSP專案進行多倉庫管理. 為了方便需要,對git語句進行了封裝,也就形成了repo.

Android原始碼編譯系統原始碼目錄

Android 8.0之後原始碼目錄有所改變 Android平臺四層架構對應原始碼中的目錄: 第一層:應用程式層(applications)對應根目錄下packages/apps 第二層:應用程式框架層(application framework)對應根目錄下的f

CryEnging5.5原始碼編譯2018-9-30

為了寫這篇部落格,我把自己以前已經編譯好的CE全刪除了,從頭開始來一遍,以便幫助大家,從頭開始編譯一個完整的CryEngine。 目錄 編譯時間:2018年9月30日 從github獲取CryEngine最新原始碼 CryEngine的github地址:

Android原始碼解析二十九-->應用程式返回按鍵執行流程

從這篇文章中我們開始分析android系統的事件分發流程,其實網上已經有了很多關於android系統的事件分發流程的文章,奈何看了很多但是印象還不是很深,所以這裡總結一番。 android系統的事件分發流程分為很多部分: Native層 –> V

Android原始碼解析二十七-->HOME事件流程

上一篇文章中我們介紹了android系統的截圖事件,由於截圖事件是一種系統全域性處理事件,所以事件的處理邏輯不是在App中執行,而是在PhoneWindowManager中執行。而本文我們現在主要講解android系統中HOME按鍵的事件處理,和截圖事件類似

Android原始碼解析二十八-->電源開關機按鍵事件流程

前面我們講解了系統截圖按鍵處理流程,HOME按鍵處理流程,今天再來講解一下電源開關機按鍵事件流程,當然這也是系統按鍵處理流程方面的最後一篇部落格了。 和截圖按鍵、HOME按鍵的處理流程類似,電源按鍵由於也是系統級別的按鍵,所以對其的事件處理邏輯是和截圖按鍵

android編譯dex 和 odex,非腦殘轉帖,絕對可靠

Android 反編譯 反編譯odex檔案(例如framework.odex),若是反編譯dex,直接第4步 1.由於反編譯odex的工具在D:\Develop tools\android反編譯工具\odex中,因此為了執行命令方便一點在odex資料夾裡面,將syste

Android原始碼解析二十一-->PopupWindow載入繪製流程

在前面的幾篇文章中我們分析了Activity與Dialog的載入繪製流程,取消繪製流程,相信大家對Android系統的視窗繪製機制有了一個感性的認識了,這篇文章我們將繼續分析一下PopupWindow載入繪製流程。 在分析PopupWindow之前,我們將

Android原始碼解析二十六-->截圖事件流程

今天這篇文章我們主要講一下Android系統中的截圖事件處理流程。用過android系統手機的同學應該都知道,一般的android手機按下音量減少鍵和電源按鍵就會觸發截圖事件(國內定製機做個修改的這裡就不做考慮了)。那麼這裡的截圖事件是如何觸發的呢?觸發之後

ffmpeg4.0.2解碼H264

介面變更: AVStream的codec引數被codecpar引數所替代 AVCodecContext *codec變為AVCodecParameters *codecpar av_register_all被棄用 新增av_demuxer_iterate

01-centos7.2原始碼編譯部署LNMP+zabbix3.22017-03-07

環境準備 配置基礎服務 安裝mysql資料庫 安裝nginx 安裝php 配置php 安裝zbabix Zabbix Server基本配置 Ngi

讀Muduo原始碼筆記TCP自連線---4

1、問題原因   svr掛掉了,埠釋放了,cli去connect這個目的埠的時候正好選擇了這個埠作為源埠,此時埠沒人用,使用是合法的。於是自連線形成了。 就是出現源ip和源埠通目的ip和目的埠完全相同的情況,也就是在服務端沒有啟動,客戶端也可以連線成功,但會造成服務端無法啟

WinPcap 中文技術文件4.1.2 第三章

1.  WinPcap教程:循序漸進教您使用WinPcap 本節將向您顯示如何使用WinPcapAPI的一些特性。本教程被組織成一系列課程,以循序漸進的方式,讓讀者從最基本的部分(獲得裝置列表)到最複雜的部分(控制傳送佇列並收集和統計網路流量)來了解如何使用WinPcap進

Android原始碼編譯——Ubuntu 14.10的make3.8、gcc-4.4.7和g++-4.4.7安裝方法

很久沒分享內容了,今天正好有空。整理一下分享給大家。 之前編譯原始碼用的是12.10升級上來的,所以沒有遇到過編譯提示需要安裝“make 3.8”。這次換了個新硬碟,重新安裝了Ubuntu。是直接安裝的14.10,系統預設的是make4.0以上了,而谷歌的An

Android原始碼編譯環境的配置以及原始碼編譯find7

PS:首先,我們在準備編譯環境之前,為了防止網路出錯的問題(需要翻牆),請在終端下輸入:sudo gedit /etc/hosts;開啟hosts檔案,然後新增: 192.30.252.129  github.com 74.125.31.82    www.googleso

solr集群搭建4.10.2

分享 keep 基礎上 com uri zookeepe 查看 zip 地址 配置環境為centos6.8 下載tomcat程序到服務器,並解壓啟動服務測試 [root@hadoop01 ~]# wget http://apache.claz.org/tomcat/tomc

VTK原始碼編譯VS2013編譯支援Qt的VTK庫

VTK原始碼編譯詳細教程(VS2013編譯支援Qt的VTK庫) 本文主要用於編譯支援Qt的 VTK8.0 庫,重點在於編譯VTK庫,供Qt呼叫。 第1步:新建一個資料夾:vtkDir 第2步:在該資料夾下新建兩個資料夾vtk_bin、vtk_src 第3步:將下載好的VT

保姆級教程——Ubuntu16.04 Server下深度學習環境搭建:安裝CUDA8.0,cuDNN6.0,Bazel0.5.4原始碼編譯安裝TensorFlow1.4.0(GPU版)

寫在前面 本文敘述了在Ubuntu16.04 Server下安裝CUDA8.0,cuDNN6.0以及原始碼編譯安裝TensorFlow1.4.0(GPU版)的親身經歷,包括遇到的問題及解決辦法,也有一些自己的經驗,希望能對讀者有所幫助。期間參考了許多前人的文章,後文會一一附上鍊接,在此先行謝過。在下能力有限,

kubernetes原始碼編譯最新

假設,你已經擁有正在執行的叢集,相關環境已經配置好。 此處只記錄如何編譯k8s的最新原始碼,用來測試k8s的新功能RunAsGroup。 相關文章後續會更新。。。 1、去github上clone 最新的原始碼,筆者此時是v1.13.0 2、 Branch:

vlc原始碼編譯Ubuntu12.04LTS

1.安裝依賴庫 sudo apt-get install git libtool build-essential pkg-config autoconf sudo apt-get build-dep vlc 2.vlc原始碼下載及編譯 wget ftp://ftp.videolan.or