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

(好久沒上簡書了,這是一篇兩年前寫的簡單教程,忘記發了哈哈哈哈,補上!)

我們經常看到一些技術文章分析,例如 Android源碼分析Activity啟動流程、Android Luncher實現分析,還有涉及到硬件層的同學會面對的Wifi,Bluetooth實現分析等等。

然后,問題來了,這些源碼在哪里看?

如何閱讀源代碼,大概是每個Android學習者都繞不過的問題。
當年的我也是這樣小白過來的,翻了翻Sdk里下載的源碼,怎么人家說的這些文件夾我都沒有? 我都全局搜索了怎么還是沒有他說的這個類?這個XML哪里來的?...
各種尷尬迷茫不知所措....

直到我百度到了AOSP

什么是AOSP

AOSP,即 Android Open Source Project。

作為一個開源項目,內容我們可以簡單理解為Android完整源代碼,下面這張是我們每個開始學習Android的同學都接觸過的一張Android架構圖。

經典款Android結構圖
AOSP概覽截圖

第二張圖是源自AOSP官網說明的概覽截圖。

其中的Android堆棧圖和我們見過的Android架構圖基本一致,只是在Linux內核層上多出了HAL,硬件抽象層,看說明主要是包含音視頻,藍牙,傳感器之類的硬件內容。(未免誤人子弟就不多講了,畢竟我也不不怎么熟悉,內容已經嚴重偏離標題。。。)

于是乎,大家應該理解了,不同于SDK中的閹割版源碼(通常只能用來查看常用類),
AOSP項目是包含上述架構圖中全部內容,完整可編譯的,甚至可以直接打包成rom給手機刷機的版本

完整的Android源碼是包含Application層的,也即包含許多Android內置應用,如堆棧圖中標注的Luncher,短信,相機,聯系人等等應用的完整代碼。如果想要實現類似功能,對比Android原生實現是一定要做的。
出于學習,這些項目也是個很好的選擇,對理解Android系統運行的機制和實現原理都非常有幫助。

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

在線瀏覽AOSP源代碼

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

本地獲取AOSP項目源碼

然而在線代碼僅能用于瀏覽,并受限于網絡,使用起來也不是那么順暢。自然,獲取一套本地的Aosp代碼就餓很有必要了,不僅是可以方便查看學習,還可以自己修改,編譯打包。通常如果想要成為一名系統或是驅動工程師,這是必不可少的一步。

Aosp官網有詳細的教程指導我們一步步按順序獲取并編譯運行源代碼。

但是在獲取代碼這一步,考慮到AOSP體積龐大,國際網絡需要翻墻還不穩定,真的使用官方說明來操作,絕對是一次痛不欲生的經歷。所以本文采用的是通過清華大學鏡像站的說明方法來獲取代碼。

在獲取代碼后,可以繼續學習Aosp官網上的源碼編譯相關知識。

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

需要注意的是,AOSP代碼只能在Linux和Mac上進行編譯,以往的
Windows用戶只能通過虛擬機或者安裝雙系統來解決。但是隨著
WSL的推出,我們也可以直接在windows上通過Linux子系
統來操作了。
如果沒有合適的Linux操作途徑,windows用戶就只能下載來純看代碼了

準備工作

1.一塊足夠大的硬盤,不說編譯了,就算存放代碼你也需要30G,建議留足100G的空間,即使AOSP并不會用到這么多。
2.如果你是Win10電腦,必須已經開啟了WSL,可以直接運行ubuntu
bash。如果還沒有,請看 Win10 直接運行內置Linux子系統
3.通暢高速的網絡

開始

我使用的是Win10 Linux子系統來進行操作。

清華大學鏡像站說明中提供了兩種方法,這里采用的是使用每月更新的初始化包。該方法獲取的是最新的AOSP代碼版本,如果需要下載指定版本的AOSP,可以參考說明,選擇傳統方法。

1.安裝Repo

Repo以 Git 為基礎構建的代碼庫管理工具,具體信息可以參考這里。這里我們先簡單的將Repo當作獲取代碼,并保持更新的工具就好。

打開ubuntu on windows,分別執行以下命令

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

在空余的硬盤下創建好存放代碼的文件夾AndroidSource,
在bash中切換到指定目錄,使用執行以下命令

一,使用傳統方法
切換到工作目錄,該節方法取自鏡像站說明。

初始化倉庫:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest

**如果提示無法連接到 gerrit.googlesource.com,請參照[git-repo的幫助頁面](https://mirrors.tuna.tsinghua.edu.cn/help/git-repo)的更新一節。**
如果需要某個特定的 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

同步源碼樹(以后只需執行這條命令來同步):
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文件夾對應windows的文件架構,例如通過 mnt/c 來訪問C盤
3.注意不要直接在bash主目錄下載大文件,Linux子系統位于系統盤,C盤會撐不住。

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

感覺網速有點慢,然后反應過來在win10上完全不必要wget 。

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

一般人我不告訴

換到迅雷預計時間減少36小時,并且直觀的看到文件大小29G,這個才是Linux和win10的完美結合有沒有!!!

3.解壓并檢出代碼

漫長的下載完成后,解壓下載文件,并在bash中通過repo sync檢出完整目錄。

復制一下鏡像站的說明

tar xf aosp-latest.tar
cd AOSP   # 解壓得到的 AOSP 工程目錄
# 這時 ls 的話什么也看不到,因為只有一個隱藏的 .repo 目錄
repo sync # 正常同步一遍即可得到完整目錄
# 或 repo sync -l 僅checkout代碼

tar是linux中的壓縮命令,xf表明解壓指定文件。
這里同樣建議使用winrar等windows平臺軟件進行解壓,相對WSL的文件效率會高出很多。
當代碼檢出完成,我們就可以在AOSP目錄下看到完整的項目源代碼了。

使用 repo sync 時,可能會出現 /usr/bin/env : python :No Such file or directory 提示,這是由于WSL中的Python沒有正確安裝。
輸入 apt-get install python 安裝python2.7即可。

然后繼續


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了,但由于過于精簡,缺失依賴比較嚴重,以上我們也最好在開始全部安裝一遍的。不必擔心過多軟件會重復安裝,linux會自動篩選缺失的程序。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。