Android系統開發 使用windows系統的WSL編譯Android10系統

前言

  在自學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是上一個系統創建的,新的系統有時候會無法訪問,這裏我試過兩種方式,都是可行的,只要不是剪切重命名貌似都可以

  1. 使用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空間不足解決思路

# 將現有swap移動到主內存,可能需要幾分鐘
sudo swapoff -a
# 創建新的swap文件,bs×count=最後生成的swap大小,這裏設置8G
sudo dd if=/dev/zero of=/swapfile bs=1G count=8
# 設置權限
sudo chmod 0600 /swapfile
# 設置swap
sudo mkswap /swapfile
# 打開swap
sudo swapon /swapfile
# 檢查設置是否有效
grep Swap /proc/meminfo
# 或者htop看一下
# 設置永久有效
sudo gedit /etc/fstab
# 在末尾行加上 # /swapfile swap swap sw 0 0
 
 

end

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章