Android系統源碼下載及編譯流程
- 1.準備工作
- 2.Android源碼下載
- 3.Android編譯環境搭建
- 4.Android系統編譯
- 5.Android內核模塊編譯
- Android 由四個層組成:
- Linux 內核(c/c++)
- 本地用戶空間native (c/c++)
- 應用程序框架層
- 應用程序層(java)
老師說她一般在kernel、native、framework層進行代碼安全加固。
- 選擇Android4.4,4.4系統優化較4.0,2.3明顯,且不算太大;20G,6.0的大約60G
- 環境:
- ①安裝虛擬機Ubuntu16.04編譯快
4G運存,CPU 4核心,80G硬盤(最後佔50G) - ②安裝samba文件服務器,進行文件傳輸
- ①安裝虛擬機Ubuntu16.04編譯快
兩種方式:
- repo工具(批處理工具,一次下載多個git倉庫)
- ①.安裝repo:
mkdir ~/bin
PATH=~/bin:$PATH
下載repo腳本:
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
設置repo可執行權限:
chmod a+x ~/bin/repo - ②.初始化repo客戶端
創建AndroidCode目錄用來存放源碼:
mkdir AndroidCode
cd AndroidCode
運行repo下載源碼:
repo init -u https://android.googlesource.com/platform/manifest -b android-4.4_r1
repo sync
據說20個G,提供更新.repo文件佔10個g,我們暫時用不到,所以採用第二種,並讓同學幫我分擔了一部分流量~
- ①.安裝repo:
3.搭建Android編譯環境:
安裝一系列工具、依賴:
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 libc6-dev-i386
sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev
sudo apt-get install lib32z-dev ccache
sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4安裝jdk:
Android4.4的源碼編譯所使用的jdk爲oracle jdk1.6。jdk一定要安裝1.6的最高版本,即jdk1.6.0_45,否則編譯中會報錯- 具體過程:
在/usr/loacl目錄下創建jvm文件夾用來存放jdk:mkdir /usr/local/jvm
複製到/usr/local/jvm中:cp jdk-6u45-linux-x64.bin /usr/local/jvm
進入到/usr/local/jvm下,給.bin文件一個可執行權限
chmod +x jdk-6u45-linux-x64.bin
執行.bin文件進行安裝:./jdk-6u45-linux-x64.bin
安裝成功後設置環境變量,打開/etc/profile,添加如下幾行後保存export JAVA_HOME=/usr/local/java/jdk1.6.0_45
export JRE_HOME=/usr/local/java/jdk1.6.0_45/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH
source /etc/profile後,輸入java -version,顯示java version “1.6.0_45”則成功
- 具體過程:
4.編譯Android源碼
- 環境初始化:
~.bashrc文件末尾追加export USE_CCACHE = 1(加速編譯 )
echo export USE_CCACHE=1 >> ~/.bashrc
source ~/.bashrc
導入編譯Android源碼所需的環境變量和其他參數:
source build/envsetup.sh
最後: make –j4(開啓四線程編譯)
CPU滿負荷運行,3個多小時後,系統鏡像文件 system.img、ramdisk.img和userdata.img
5. Android內核模塊編譯
- 在/usr/local/android/kernel/goldfish/drivers/char/my_test/下,gedit hello.c
- 在my_test下,gedit makefile//編譯hello.c
內容:obj-y := hello.o //內建編譯,還有個obj-m表示模塊編譯,沒時間實現了~ - 在../char下,gedit Makefile //包含hello驅動
加入:obj-y += my_test/hello.o - 重新編譯,將hello驅動設備編譯到內核中;
make –j4 - 啓動後查看內核狀態:
emulator –kernel zImage –show-kernel &