標籤:

Android編譯打包燒錄

今日科技快訊近日,有消息稱阿里體育A輪融資估值70億元。阿里體育集團成立於2015年9月,由阿里巴巴控股,新浪和雲峰基金共同出資。成立之初,即成為國際足聯俱樂部世界盃2015-2022年的獨家冠名贊助商。去年1月,阿里體育又將美國職業橄欖球大聯盟NFL在中國的轉播權納入囊中。

作者簡介本篇作者 Nipuream,陸陸續續投了好幾篇稿,算是作者里的老司機了。今天,他將分享編譯Android源碼並寫入硬體設備的過程,感興趣的朋友可以仔細看看。

Nipuream的博客地址:

http://blog.csdn.net/yanghuinipurean

搭建環境16年底,從深圳轉戰到杭州,當然也重新換了份工作,記得剛來的時候非常的辛苦,因為10月份廣東還是比較熱的,到杭州這邊好冷,那時候嚴重的不適應,很嚴重的感冒… 這段時間嘗試去了解了下源碼,還是收穫很多的,現在努力學習cpp中,準備往這方面轉了。因為新公司都是在源碼上編譯的,所以或多或少也學習研究了下,記得剛開始下載Android源碼的時候,那個蛋疼,折騰了我一個多星期,現在寫篇文章總結下。

我選擇的是在window上安裝虛擬機,我知道好多人用mac去編譯,窮屌絲也有窮屌絲的門路,錢不是我們阻止我們學習的障礙,充分利用window和linux各自的優勢,我覺得並不比mac遜色多少。安裝好了如下圖所示:

sudo apt-get install Git-core gnupg flex bison gperf build-essential zip curl zliblg-dev gcc-multilib g++-multilib libc6-dev-i386 lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev

根據我慘痛的經歷,一般編譯不成功基本都是環境有問題,代碼有問題的可能性是非常的小的。如果有些庫安裝不了,使用sudo apt-get update一下,如果還是不行,就得自行搜索解決一下了。另外還要安裝交叉編譯器和jdk,其中如果對交叉編譯器不明白的或者不知道如何配置的請看這篇文章

http://www.linuxidc.com/Linux/2013-06/85902.htm

其中jdk需要注意的是在android5.0之後就要使用openjdk了,具體原因就是因為Oracle和google的那場官司了,使用命令 apt-get install openjdk-7-jdk.安裝完成之後得配置下環境變數,可以在 etc/profile 或者是 ~/.bashrc文件最後輸入:

配置成功後,應該如下圖所示:

另外,交叉編譯器安裝成功之後,要將Linux根目錄的Makefile文件中cpu架構改成arm的,如下圖所示:

編譯編譯linux

執行build.sh config配置環境:

然後直接執行 ./build.sh 命令開始編譯

首先要切換到我們的android目錄下,然後執行envsetup.sh腳本配置我們的環境,然後選擇我們要編譯的分支,具體步驟如圖:

接下來,我們要把 linux 編譯好的 uboot 和 kenel 拷貝到我們 android 目錄下,因為我們已經執行過我們的 envsetup.sh 腳本了,而 envsetup.sh 腳本又執行了我們的 device/softwinner/common/vendorsetup.sh 腳本,vendorsetup.sh 的腳本中有個函數叫做 extract-bsp(),我們來看下這個函數:

可以看到從 linux 目錄拷貝 kernel 和一些 modules,需要主要的是 get_lichee_out_dir() 函數,Linux 目錄一定要放在android目錄上層目錄下,自己查看源碼即可。

接下來,我們便可以執行我們的make命令來編譯我們的android系統了,make後面可以帶個參數表示執行編譯的線程條數,如果make -j8,後面的數字一般都是你電腦cpu的核數乘以2。

我的電腦是6核的,所以我可以用 make -j12,但是我就使用了 make -j8,整個編譯的過程很漫長,中途可能會報錯,報錯的原因90%以上都是環境沒有配置好,大概一般的3個小時50分鐘左右就會編譯結束,當然這個時間也是根據你計算機cpu的能力的,像用公司的編譯伺服器編譯,只需要十幾分鐘…

編譯成功後,我們使用 vendorsetup.sh 腳本裡面的 pack函數 將編譯出來的鏡像文件打包成 rom,如圖所示,紅色部分表示生成的路徑。

具體每個廠商都會提供燒錄軟體的,即使沒有提供也會把燒錄的步驟的腳本發給你的,比如芯靈圖家的A33板子就是用 PhoenixSuit 燒錄的,我們公司的是在 fastboot 模式下,燒錄rom的。按照具體的步驟做就行了,接下來發張將自己編譯過的 android6.0系統 燒錄到硬體的效果圖,很是有成就感,有么有。

訪問虛擬機畢竟是兩個系統,操作起來也不是很方面,文件互訪有很多方案,但是我覺得基於 samba 服務是最方便的,window本身就集成了samba服務,所以只需要在ubuntu系統上安裝下即可,首先 sudo apt-get install samba,安裝完成之後,敲入命令 vim /etc/samba/smb.conf , 在這個文件末尾添加幾句話,如圖所示:

接下來設置 root 的密碼,敲入命令 smbpasswd -a root ,然後重新啟動samba服務, service smb restart,查看samba進程是否啟動 ps -ef。注意有點非常的重要,我們需要設置虛擬機網路為橋接模式,這樣就會自動獲取ip連接網路了。最後在window上映射我們Linux的磁碟,如圖所示:

輸入我們虛擬機的ip就行了,進入Z盤就很方便的訪問我們linux中的文件系統了。可以看到這就是我們的Linux文件系統的根目錄。當然你也可以通過ssh訪問我們的linux,下面是我通過Xshell訪問我們的虛擬機。

更多每天學習累了,看些搞笑的段子放鬆一下吧。關注最具娛樂精神的公眾號,每天都有好心情。

如果你有好的技術文章想和大家分享,歡迎向我的公眾號投稿,投稿具體細節請在公眾號主頁點擊「投稿」菜單查看。

歡迎長按下圖 -> 識別圖中二維碼或者掃一掃關注我的公眾號:


推薦閱讀:

eclipse 編譯jni的一些設置
TarvisCI 全流程使用實踐(一)
2011 阿拉伯之春【普羅編譯】
linux下編譯mosquitto出現的問題---「ares.h: No such file or directory」
Eclipse編譯帶so庫或jar包的android應用

TAG:Android | 編譯 |