在虛擬機裡面跑了個虛擬機,預留了20G的空間,然後各種環境配不好(第一次玩Linux),弄了1day左右吧,終於開始下載了,還好可以科學上網,省了一點功夫。然後還沒有寫腳本,就苦逼的守在它下啊下。因為它指不定的會出錯,需要repo sync。然後經過漫長的等待,本以為就等出了Success,結果等出了磁盤空間不足。然後只有忍痛把東西都刪掉重頭來過,接著又給Ubuntu分配了90G的空間,想著一定能夠了,這次寫了腳本,不用再苦逼的望著屏幕了。結果。。下了88G+的時候又提示空間不足。說句真的,當時砸電腦的心都有了。然後在StackOverflow看見有人給了Google官方的下載指南,進去一看嚇我一跳,至少需要120G,我硬盤就500G,准備暫時放棄,先買個固態來著。但是不甘心啊!
1 編譯環境
Ubuntu 16.04 LTS
Android 6.0_r1
Open JDK 7
2准備工作
(1) 下載Android 6.0源碼.
Android 6.0源碼下載地址: http://www.linuxidc.com/Linux/2016-01/127285.htm
注意:源碼的存放路徑不能有中文,否則編譯到系統內置的apk的時候會報錯無法解析class.dex文件
(2) 解壓源碼,合並文件。
下載完畢後,使用下面命令合並:
cat Android6_r1_*>Android6_r1
(3) 解壓源碼。
tar -zxvf Android6_r1.tgz
解壓源碼是個漫長的過程,解壓後會在當前目錄下生成一個mydroid的文件夾。
4 安裝依賴
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386
sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib
sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386
sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev
sudo apt-get install git-core gnupg flex bison gperf build-essential
sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4
sudo zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386
sudo lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache
5 避免小坑在編譯過程中如果host的默認編輯器時clang的話機就會導致: recipe for target ' out/host/linux-x86/obj/lib/libart.so'failed.
所以在開始編譯之前需要把clang關掉,方法是在art/build/Android.common_build.mk ,中找到WITHOUT_HOST_CLANG,關閉clang即可。
ifneq ($(WITHOUT_HOST_CLANG),true)
改為:
ifeq ($(WITHOUT_HOST_CLANG),false)
7 開始編譯
(1) 在 .bashrc文件末尾添加:export USE_CCACHE = 1
echo export USE_CCACHE=1 >> ~/.bashrc
(2) 為了提高編譯效率,設置編譯器高速緩存:
prebuilts/misc/linux-x86/ccache/ccache -M 50G
(3) 接著導入編譯Android源碼所需的環境變量和其它參數:source build/envsetup.sh
(4) 運行lunch命令選擇編譯目標:
lunch
選擇1:
(5) 開始編譯,執行make -j8, 8為同時編譯的線程數,一般google推薦這個數字為2倍的cpu個數再加上2,比如4核,就是10。
make -j8 關於cpu個數,可以用下面命令查看:
cat /proc/cpuinfo好了,開始編譯了.
8 編譯成功
編譯成功後如下圖:
進入mydroid/out/target/product/generic目錄,可以看到編譯好的文件:
啟動模擬器:
emulator 稍等一會,就可以出現開頭的模擬器畫面了:
9 其他的一些問題
當我成功啟動之後,關機重來,試了試模塊編譯,然後再啟動模擬器時,報錯:emulator:未找到命令
解決辦法:
build/envsetup.sh
lunch 1
終於可以開始愉快的學習了:)
更多Android相關信息見Android 專題頁面 http://www.linuxidc.com/topicnews.aspx?tid=11