前言
在自學framework的時候,最大的難題就是如何動手實踐修改framework並且看到實踐效果。但是Android系統是需要linux環境下編譯的,我們一般的個人電腦都是windows系統,所以爲了學習framework重裝電腦爲linux系統有點不太實際。個人也試過虛擬機,但是系統資源開銷太大了,而且也非常繁瑣。 最後發現了Windows系統下的WSL可以滿足編譯Android系統的需求,並且效果十分不錯,也比虛擬機更加高效。
硬件要求
電腦要求內存最少20G/ 硬盤空間600GB以上 (Aosp的代碼量龐大)
Windows系統相關準備
1.首先要求windows10以上,並且有微軟商城。
2.設置電腦相關配置
3.在商城中搜索 linux 關鍵字, 選擇下載ubn-18.04.6版本
更新wsl內核
Linux 內核更新包會安裝最新版本的 WSL 2 Linux 內核,以便在Windows 操作系統映像中運行 WSL。(若要運行 Microsoft Store 中的 WSL並更頻警地推送更新請使用 wsl.exe --install 或 wsl.exe --update)
初始化linux系統
打開後創建賬號與密碼(這個密碼很重要是sudo權限的密碼,請牢記)
遷移WSL到其他盤中
因爲wsl是默認在c盤安裝的,但是後續我們還需要拉取aosp,c盤空間無法承載。這裏我們需要將wsl搬遷到其他硬盤中(個人是建議用一個1TB的移動硬盤,這樣你就可以不受限制的在各種設備上進行編譯)。
打開cmd命令行,如下步驟操作:
第一步,查看狀態並且停止
如果Running運行狀態,關掉它(注意如果你的wsl正在運行,先將wsl關閉在輸入下面的命令)
wsl --shutdown
第二步,搬遷位置
wsl --export Ubuntu-18.04 Z:\Ubuntu_WSL_18046\Ubuntu.tar
第三步,註銷原來的wsl
wsl --unregister Ubuntu-18.04
第四步,重新導入新位置的wsl
wsl --import Ubuntu-18.04 Z:\Ubuntu_WSL_18046 Z:\Ubuntu_WSL_18046\Ubuntu.tar -->> 注意這裏有2個路徑
生成成功會在目錄下多一個虛擬磁盤ext4.vhdx 文件
第五步,重新設置默認名稱
Ubuntu1804 config --default-user zhou
編譯環境
首先更新全部的軟件
cd ~/ && sudo apt-get update
安裝git和python
sudo apt install git python
配置repo環境
mkdir ~/bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
cp repo ~/bin
配置repo環境變量
vim ~/.bashrc
#添加下面兩行環境變量配置 !wq 保存退出
PATH=~/bin:$PATH
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
#環境變量生效
source ~/.bashrc
下載代碼
創建目錄並下載aosp代碼
mkdir aosp && cd aosp
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r36
repo sync -c
啓動模擬器,驗證編譯成果
wsl2由於是沒有界面的unbutu 環境集成,不支持linux下的虛擬機kvm,並不能直接啓動帶界面的模擬器,我們需要用我們自己windows android sdk環境下的emulater.exe去加載編譯產物img來進行調試。
(1)、在android studio中啓動avd manager,創建一個和你編譯指定版本一致的模擬器,這裏是android 10, x86_64的鏡像,起個名字如 wsl-android-10,下面要用到這個名字
(2)、加載wsl2編譯好的img到window模擬器中,一般調試只需要system.img和userdata.img
擦除已有的avd數據
D:\android-sdk\emulator\emulator.exe -avd wsl-android-10 -wipe-data
模擬器重新加載android image
D:\android-sdk\emulator\emulator.exe -avd wsl-android-10 -system "\\wsl$\Ubuntu\root\aosp\out\target\pr
替換ext4.vhdx的方式
ext4.vhdx就是linux的虛擬硬盤,我們下載完成aosp後,在其他電腦上如果需要實現系統編譯,在下載一次aosp的海量代碼,不太現實,可以通過替換ext4的方式實現
將舊的ext4.vhdx文件copy到新的裏,避免權限問題,因爲舊的ext4.vhdx是上一個系統創建的,新的系統有時候會無法訪問,這裏我試過兩種方式,都是可行的,只要不是剪切重命名貌似都可以
- 使用copy命令,或者在文件管理器裏複製粘貼進行覆蓋
copy D:\Ubuntu-18.04-wsl-old\ext4.vhdx D:\Ubuntu-18.04-wsl\ext4.vhdx
編譯中可能會出現問題
內存不足或者swap空間不足
內存不足解決思路一
有可能真的是你的電腦內存不足夠提供編譯時所需的內存(最少16G只是建議,但是有可能16G都是不夠使用的),這裏建議直接增加內存條
內存不足解決思路二
配置內存
export MAVEN OPTS="-Xms8192m -Xmx8192m"
swap空間不足解決思路
end