WSL For Android | 在Windows上獲取可編譯的AOSP源代碼

(好久沒上簡(jiǎn)書了唐全,這是一篇兩年前寫的簡(jiǎn)單教程哨啃,忘記發(fā)了哈哈哈哈,補(bǔ)上U迳骸)

我們經(jīng)澄看到一些技術(shù)文章分析,例如 Android源碼分析Activity啟動(dòng)流程、Android Luncher實(shí)現(xiàn)分析囤踩,還有涉及到硬件層的同學(xué)會(huì)面對(duì)的Wifi旨椒,Bluetooth實(shí)現(xiàn)分析等等。

然后堵漱,問題來(lái)了综慎,這些源碼在哪里看?

如何閱讀源代碼勤庐,大概是每個(gè)Android學(xué)習(xí)者都繞不過的問題示惊。
當(dāng)年的我也是這樣小白過來(lái)的,翻了翻Sdk里下載的源碼愉镰,怎么人家說(shuō)的這些文件夾我都沒有? 我都全局搜索了怎么還是沒有他說(shuō)的這個(gè)類米罚?這個(gè)XML哪里來(lái)的?...
各種尷尬迷茫不知所措....

直到我百度到了AOSP

什么是AOSP

AOSP丈探,即 Android Open Source Project录择。

作為一個(gè)開源項(xiàng)目,內(nèi)容我們可以簡(jiǎn)單理解為Android完整源代碼,下面這張是我們每個(gè)開始學(xué)習(xí)Android的同學(xué)都接觸過的一張Android架構(gòu)圖隘竭。

經(jīng)典款A(yù)ndroid結(jié)構(gòu)圖
AOSP概覽截圖

第二張圖是源自AOSP官網(wǎng)說(shuō)明的概覽截圖塘秦。

其中的Android堆棧圖和我們見過的Android架構(gòu)圖基本一致,只是在Linux內(nèi)核層上多出了HAL动看,硬件抽象層尊剔,看說(shuō)明主要是包含音視頻,藍(lán)牙菱皆,傳感器之類的硬件內(nèi)容须误。(未免誤人子弟就不多講了,畢竟我也不不怎么熟悉搔预,內(nèi)容已經(jīng)嚴(yán)重偏離標(biāo)題霹期。。拯田。)

于是乎历造,大家應(yīng)該理解了,不同于SDK中的閹割版源碼(通常只能用來(lái)查看常用類)船庇,
AOSP項(xiàng)目是包含上述架構(gòu)圖中全部?jī)?nèi)容吭产,完整可編譯的,甚至可以直接打包成rom給手機(jī)刷機(jī)的版本鸭轮。

完整的Android源碼是包含Application層的臣淤,也即包含許多Android內(nèi)置應(yīng)用,如堆棧圖中標(biāo)注的Luncher窃爷,短信邑蒋,相機(jī),聯(lián)系人等等應(yīng)用的完整代碼按厘。如果想要實(shí)現(xiàn)類似功能医吊,對(duì)比Android原生實(shí)現(xiàn)是一定要做的。
出于學(xué)習(xí)逮京,這些項(xiàng)目也是個(gè)很好的選擇卿堂,對(duì)理解Android系統(tǒng)運(yùn)行的機(jī)制和實(shí)現(xiàn)原理都非常有幫助。

(扯了這么久終于到了今天的重點(diǎn))
通常我們有兩種方法獲取源代碼懒棉,一是直接前往一些在線網(wǎng)站瀏覽草描,二是自己下載一份完整代碼到本地。

在線瀏覽AOSP源代碼

這里分享一個(gè)比較好用的網(wǎng)站 AndroidXRef 策严,這個(gè)也是許多大神的共同推薦(強(qiáng)行給自己拉高下檔次)
網(wǎng)站上有Android各個(gè)歷史版本的完整代碼穗慕,支持文件搜索,還是很好用的享钞。特別是需要查看特定版本差異時(shí)揍诽,不是下載一份Aosp就能搞定的诀蓉。

本地獲取AOSP項(xiàng)目源碼

然而在線代碼僅能用于瀏覽栗竖,并受限于網(wǎng)絡(luò)暑脆,使用起來(lái)也不是那么順暢。自然狐肢,獲取一套本地的Aosp代碼就餓很有必要了添吗,不僅是可以方便查看學(xué)習(xí),還可以自己修改,編譯打包份名。通常如果想要成為一名系統(tǒng)或是驅(qū)動(dòng)工程師碟联,這是必不可少的一步。

Aosp官網(wǎng)有詳細(xì)的教程指導(dǎo)我們一步步按順序獲取并編譯運(yùn)行源代碼僵腺。

但是在獲取代碼這一步鲤孵,考慮到AOSP體積龐大,國(guó)際網(wǎng)絡(luò)需要翻墻還不穩(wěn)定辰如,真的使用官方說(shuō)明來(lái)操作普监,絕對(duì)是一次痛不欲生的經(jīng)歷。所以本文采用的是通過清華大學(xué)鏡像站的說(shuō)明方法來(lái)獲取代碼琉兜。

在獲取代碼后凯正,可以繼續(xù)學(xué)習(xí)Aosp官網(wǎng)上的源碼編譯相關(guān)知識(shí)。

清華大學(xué)開源軟件鏡像站
AOSP官方網(wǎng)站 (需翻墻)

需要注意的是豌蟋,AOSP代碼只能在Linux和Mac上進(jìn)行編譯廊散,以往的
Windows用戶只能通過虛擬機(jī)或者安裝雙系統(tǒng)來(lái)解決。但是隨著
WSL的推出梧疲,我們也可以直接在windows上通過Linux子系
統(tǒng)來(lái)操作了允睹。
如果沒有合適的Linux操作途徑,windows用戶就只能下載來(lái)純看代碼了

準(zhǔn)備工作

1.一塊足夠大的硬盤幌氮,不說(shuō)編譯了缭受,就算存放代碼你也需要30G,建議留足100G的空間浩销,即使AOSP并不會(huì)用到這么多贯涎。
2.如果你是Win10電腦,必須已經(jīng)開啟了WSL慢洋,可以直接運(yùn)行ubuntu
bash塘雳。如果還沒有,請(qǐng)看 Win10 直接運(yùn)行內(nèi)置Linux子系統(tǒng)
3.通暢高速的網(wǎng)絡(luò)

開始

我使用的是Win10 Linux子系統(tǒng)來(lái)進(jìn)行操作普筹。

清華大學(xué)鏡像站說(shuō)明中提供了兩種方法败明,這里采用的是使用每月更新的初始化包。該方法獲取的是最新的AOSP代碼版本太防,如果需要下載指定版本的AOSP妻顶,可以參考說(shuō)明酸员,選擇傳統(tǒng)方法。

1.安裝Repo

Repo以 Git 為基礎(chǔ)構(gòu)建的代碼庫(kù)管理工具讳嘱,具體信息可以參考這里幔嗦。這里我們先簡(jiǎn)單的將Repo當(dāng)作獲取代碼,并保持更新的工具就好沥潭。

打開ubuntu on windows邀泉,分別執(zhí)行以下命令

# 在主目錄下創(chuàng)建bin文件夾  ~/是linux下的主目錄
mkdir ~/bin
# 將bin文件添加到PATH,類似windows下的環(huán)境變量
PATH=~/bin:$PATH
# 下載repo到路徑下
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
# 添加可執(zhí)行權(quán)限
chmod a+x ~/bin/repo
2.下載初始化包

在空余的硬盤下創(chuàng)建好存放代碼的文件夾AndroidSource钝鸽,
在bash中切換到指定目錄汇恤,使用執(zhí)行以下命令

一,使用傳統(tǒng)方法
切換到工作目錄拔恰,該節(jié)方法取自鏡像站說(shuō)明因谎。

初始化倉(cāng)庫(kù):
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

**如果提示無(wú)法連接到 gerrit.googlesource.com,請(qǐng)參照[git-repo的幫助頁(yè)面](https://mirrors.tuna.tsinghua.edu.cn/help/git-repo)的更新一節(jié)颜懊。**
如果需要某個(gè)特定的 Android 版本([列表](https://source.android.com/source/build-numbers.html#source-code-tags-and-builds)):
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1

同步源碼樹(以后只需執(zhí)行這條命令來(lái)同步):
repo sync
二 财岔,下載每月更新的初始包
# 切換到我Z盤上的AndroidSource文件夾
cd /mnt/z/AndroidSource
# 下載初始化包
wget https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar 
在bash中通過wget下載

1.wget 是Linux下的下載命令
2.在WSL中mnt文件夾對(duì)應(yīng)windows的文件架構(gòu),例如通過 mnt/c 來(lái)訪問C盤
3.注意不要直接在bash主目錄下載大文件饭冬,Linux子系統(tǒng)位于系統(tǒng)盤使鹅,C盤會(huì)撐不住。

不過這里我開始下載后 Ctrl + C 取消掉了...

感覺網(wǎng)速有點(diǎn)慢昌抠,然后反應(yīng)過來(lái)在win10上完全不必要wget 患朱。

所以正確操作是打開迅雷,直接下載到目錄下..(會(huì)不會(huì)有看一行操作一行的同學(xué)想要打我)

一般人我不告訴

換到迅雷預(yù)計(jì)時(shí)間減少36小時(shí),并且直觀的看到文件大小29G炊苫,這個(gè)才是Linux和win10的完美結(jié)合有沒有2锰!侨艾!

3.解壓并檢出代碼

漫長(zhǎng)的下載完成后执虹,解壓下載文件,并在bash中通過repo sync檢出完整目錄唠梨。

復(fù)制一下鏡像站的說(shuō)明

tar xf aosp-latest.tar
cd AOSP   # 解壓得到的 AOSP 工程目錄
# 這時(shí) ls 的話什么也看不到袋励,因?yàn)橹挥幸粋€(gè)隱藏的 .repo 目錄
repo sync # 正常同步一遍即可得到完整目錄
# 或 repo sync -l 僅checkout代碼

tar是linux中的壓縮命令,xf表明解壓指定文件当叭。
這里同樣建議使用winrar等windows平臺(tái)軟件進(jìn)行解壓茬故,相對(duì)WSL的文件效率會(huì)高出很多。
當(dāng)代碼檢出完成蚁鳖,我們就可以在AOSP目錄下看到完整的項(xiàng)目源代碼了磺芭。

使用 repo sync 時(shí),可能會(huì)出現(xiàn) /usr/bin/env : python :No Such file or directory 提示醉箕,這是由于WSL中的Python沒有正確安裝钾腺。
輸入 apt-get install python 安裝python2.7即可徙垫。

然后繼續(xù)


image.png
  sudo apt-get install git-core gnupg flex bison gperf build-essential 
  zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 
  lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache 
  libgl1-mesa-dev libxml2-utils xsltproc unzip

上述軟件包是AOSP建議ubuntu14.04安裝的,WSL雖然版本為16.04了放棒,但由于過于精簡(jiǎn)姻报,缺失依賴比較嚴(yán)重,以上我們也最好在開始全部安裝一遍的哨查。不必?fù)?dān)心過多軟件會(huì)重復(fù)安裝逗抑,linux會(huì)自動(dòng)篩選缺失的程序剧辐。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末寒亥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子荧关,更是在濱河造成了極大的恐慌溉奕,老刑警劉巖,帶你破解...
    沈念sama閱讀 210,914評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件忍啤,死亡現(xiàn)場(chǎng)離奇詭異加勤,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)同波,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,935評(píng)論 2 383
  • 文/潘曉璐 我一進(jìn)店門鳄梅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人未檩,你說(shuō)我怎么就攤上這事戴尸。” “怎么了冤狡?”我有些...
    開封第一講書人閱讀 156,531評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵孙蒙,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我悲雳,道長(zhǎng)挎峦,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,309評(píng)論 1 282
  • 正文 為了忘掉前任合瓢,我火速辦了婚禮坦胶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘晴楔。我一直安慰自己诈乒,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,381評(píng)論 5 384
  • 文/花漫 我一把揭開白布递礼。 她就那樣靜靜地躺著鹦牛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钙皮。 梳的紋絲不亂的頭發(fā)上蜂科,一...
    開封第一講書人閱讀 49,730評(píng)論 1 289
  • 那天顽决,我揣著相機(jī)與錄音,去河邊找鬼导匣。 笑死才菠,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贡定。 我是一名探鬼主播赋访,決...
    沈念sama閱讀 38,882評(píng)論 3 404
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼缓待!你這毒婦竟也來(lái)了蚓耽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,643評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤旋炒,失蹤者是張志新(化名)和其女友劉穎步悠,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘫镇,經(jīng)...
    沈念sama閱讀 44,095評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鼎兽,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,448評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铣除。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片谚咬。...
    茶點(diǎn)故事閱讀 38,566評(píng)論 1 339
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖尚粘,靈堂內(nèi)的尸體忽然破棺而出择卦,到底是詐尸還是另有隱情,我是刑警寧澤背苦,帶...
    沈念sama閱讀 34,253評(píng)論 4 328
  • 正文 年R本政府宣布互捌,位于F島的核電站,受9級(jí)特大地震影響行剂,放射性物質(zhì)發(fā)生泄漏秕噪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,829評(píng)論 3 312
  • 文/蒙蒙 一厚宰、第九天 我趴在偏房一處隱蔽的房頂上張望腌巾。 院中可真熱鬧,春花似錦铲觉、人聲如沸澈蝙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,715評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)灯荧。三九已至,卻和暖如春盐杂,著一層夾襖步出監(jiān)牢的瞬間逗载,已是汗流浹背哆窿。 一陣腳步聲響...
    開封第一講書人閱讀 31,945評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厉斟,地道東北人挚躯。 一個(gè)月前我還...
    沈念sama閱讀 46,248評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像擦秽,于是被迫代替她去往敵國(guó)和親码荔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,440評(píng)論 2 348