做android framework開發也有很多年了,一直都是在公司裏面下載編譯,最近因爲自己有個小需求想要實現,因此想着自己下載一個aosp的代碼來修改實現,一番查詢之後,瞭解到mokee這個項目,因此決定自己動手,製作rom定製需求,下面是我在整個源碼下載,編譯的一個流程,以及遇到的問題總結,如果哪位同仁有相關的需求需要實現,希望如下經驗可以幫到你
mokee下載
mokee的代碼開源託管在github上,其他aosp的代碼,我們需要從google下載,由於某些衆所周知的原因,我們並不能鏈接到google服務器上,因此在查閱一番之後,決定使用國內鏡像。首先我們需要準備如下資料:
- VPN:部分資源由於種種原因,下載速度很慢,這裏使用VPN之後,能夠提高下載速度
- aosp下載鏈接的國內代理,這裏在mokee的論壇裏面有好幾種,我用的是清華源
https://mirrors.tuna.tsinghua.edu.cn/git/AOSP
- repo工具下載鏈接: 這裏用的是mokee論壇提供的下載鏈接
https://raw.githubusercontent.com/MoKee/git-repo/stable/repo
- 硬件配置:因爲我編譯的是Android 10.0,可能需要的配置比較高,所以我把我的臺式機直接重裝了ubuntu 18.04, 配置如下:
系統:ubuntu 18.04
硬盤:120G 固態硬盤 + 1TB 機械硬盤
swap分區:配置20G
內存:8G
- SSR工具:不可描述的工具
https://github.com/qingshuisiyuan/electron-ssr-backup/releases
以上工具準備OK之後,開始下載代碼,首先開啓SSR,按照官網的步驟,下載mokee repo工具
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://raw.githubusercontent.com/MoKee/git-repo/stable/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
執行完成之後,vim ~/bin/repo看下repo下載成功沒有,一般的repo是一個python腳本,如果裏面的內容是一些網頁內容,那就表明遭到了404或者403了,原因可能是網絡問題,也有可能是github.com的ip在ubuntu上可訪問,如果是網絡問題,請重新執行curl命令,再確認;如果是被禁的問題,按照如下步驟,首先前往以下站點查詢github幾個url的ip地址:https://www.ipaddress.com/search/ 接着按照如下步驟:
vi /etc/hosts
文件末尾加入:
199.232.68.133 raw.githubusercontent.com
140.82.113.4 github.com
199.232.69.193 github.global.ssl.fastly.net
然後 :eq 保存
執行完成之後,再重新執行上述curl命令,重新下載repo即可。
確保repo腳本工具下載OK之後,接下來初始化工程,在自己的工程目錄,執行如下命令
repo init -u https://github.com/MoKee/android -b mkq-mr1
這一步還是比較容易成功,執行完成之後,工程目錄下存在一個隱藏目錄.repo, 因爲我們用的是aosp源,按照mokee的提示,repo selfupdate我這裏沒有執行成功,所以我就選擇手動修改了
vi .repo/manifests/default.xml
修改
爲
修改完成之後,開始同步:
repo sync --force-sync --no-clone-bundle
之後就是漫長的等待了,一般清華源的下載速度還可以,如果同步失敗,一般根目錄下會有個android的文件夾了,將裏面的default.xml的fetch也改爲清華源,然後就是不斷的sync,直到成功repo完成爲止。
mokee編譯
下載完成之後,準備開始編譯,首先要去官網找到對應的項目設備id, 下載官網,比如紅米7A,對應的設備id是pine,那我們開始編譯pine設備的rom, 先安裝編譯依賴
sudo apt-get install openjdk-8-jdk
sudo apt-get install sudo apt-get install gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g+±multilib tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 dpkg-dev
命令流程如下:
配置編譯環境變量
. build/envsetup.sh
加載紅米配置文件, 這裏會去下載紅米7A的device配置以及kernel,以及一些vendor配置。可能會比較慢,主要是vendor目錄,device目錄,kernel目錄,如果下載失敗了,大家可以參考網上gitlab引用github項目,再從gitlab目錄下載,速度會很快,而且不會失敗。
lunch mokee_pine-userdebug
開始編譯
mka bacon -j1 > build.log
過程問題
問題1. 內存不足,導致ninjia被killed, 表現就是沒有任何LOG,只有一行killed,然後編譯停止。
解決:因爲我的機器內存只有8G,android 10.0編譯指導硬件配置爲16G,所以我通過加大swap分區解決此問題,swap分區大小爲16G.
問題2. 編譯過程中,報java heap outofmemory.
解決:java堆內存不足,android 10.0中沒有用jack編譯了,改用了soong, 在項目根目錄用如下命令配置java,編譯過程中,會自動去pick up該值
export _JAVA_OPTIONS="-Xmx4g"
問題3. lunch過程中,出現各種的git問題
解決:查了一堆資料基本都是copy paste, 沒辦法,最終去.repo下面回到對應的git庫,找到其中的url, 將github工程引導到gitlab,再用git clone單獨下載下來。
歡迎各位同行加wx交流: