Android源碼下載和編譯

搭建開(kāi)發(fā)環(huán)境

Android Jelly Bean的編譯依賴(lài)Sun JDK 1.6,所以首先需要安裝JDK 1.6。

  • 下載JDK 1.6

在oracle官網(wǎng)上下載 jdk-6u45-linux-x64.bin
下載地址

  • 安裝JDK 1.6:
$ sudo ./jdk-6u45-linux-x64.bin
$ sudo cp jdk1.6.0_45 /usr/local
  • 配置java及環(huán)境變量

** 配置環(huán)境變量
在啟動(dòng)終端并輸入

edit /etc/profile

在末尾添加一下配置,保存并退出

#set jdk environment  
export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_21  
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH  
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH  

終端輸入一下命令使配置生效

source /etc/profile

update-alternatives配置java

$ sudo update-alternatives --install /usr/bin/java java /usr/local/jdk1.6.0_45/bin/java 100
$ sudo update-alternatives --install /usr/bin/javac javac /usr/local/jdk1.6.0_45/bin/javac 100
$ sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/local/jdk1.6.0_45/bin/javadoc 100
  • 安裝必須的開(kāi)發(fā)包
$sudo apt-get install git-core gnupg flex bison gperf build-essential \
  zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \
  libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
  libgl1-mesa-dev gcc-4.4 gcc-4.4-multilib  mingw32  tofrodos \
  python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \
  u-boot-tools openssh-client libswitch-perl g++-4.4 g++-4.4-multilib \
  cksfv uuid-dev:i386 liblzo2-dev:i386

如果想要了解上述安裝包的作用,可以到Ubuntu網(wǎng)站查詢(xún)。

  • 配置gcc 4.4和g++ 4.4
$sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.4 100
$sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50
$sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.4 100
$sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50
$sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.4 100
$sudo update-alternatives --install /usr/bin/cpp cpp-bin /usr/bin/cpp-4.8 50 

下載Android上層系統(tǒng)源代碼

Android源代碼分成兩部分,其中Kernel部分需要單獨(dú)下載。這里先給出上層系統(tǒng)源碼的下載流程。該部分可以參考Android官網(wǎng)

  • 建立repo工作目錄
$ mkdir ~/bin
  • 下載repo腳本
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
  • 建立Android源碼目錄
$ mkdir -p ~/android/jellybean
$ cd ~/android/jellybean
  • 配置用戶(hù)名和郵箱(可選)
$ git config --global user.name "Your Name"
$ git config --global user.email "you@example.com"

該步驟只有在使用Gerrit工具進(jìn)行review-code提交代碼時(shí)才會(huì)用到,可以在初始化repo之后用repo init --config-name進(jìn)行修改。

  • 初始化repo
~/bin/repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.1_r3

其中,-u為源碼的git服務(wù)器地址,-b為源碼的分支。分支列表可以查看Android官網(wǎng),或者利用git ls-remote指令查看:

$ git ls-remote --tags https://android.googlesource.com/platform/manifest

如果沒(méi)有指定分支,將會(huì)下載Android主線上最新的源代碼。

  • 下載Android源碼

初始化repo之后,如果需要下載Android源碼,只需要進(jìn)入源碼根目錄,然后在終端執(zhí)行一下命令:

~/bin/repo sync

Android全部源碼十分龐大,如果只需要下載部分源碼,可以單獨(dú)指定模塊名稱(chēng)。

查看Android源碼中所有的模塊:

~/bin/repo manifest -o-

執(zhí)行后顯示的信息。

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote fetch=".." name="aosp"/>
  
  <default remote="aosp" revision="refs/tags/android-4.1.1_r3" sync-j="4"/>
  
  <project name="device/asus/grouper"/>
  <project name="device/common"/>
  <project name="device/generic/armv7-a"/>
  <project name="device/generic/armv7-a-neon"/>
  <project name="device/generic/goldfish"/>
  <project name="device/google/accessory/arduino"/>
  <project name="device/google/accessory/demokit"/>
  <project name="device/moto/common"/>
  <project name="device/moto/stingray"/>
  <project name="device/moto/wingray"/>
  <project name="device/sample"/>
  <project name="device/samsung/crespo"/>
  <project name="device/samsung/crespo4g"/>
  <project name="device/samsung/maguro"/>
  <project name="device/samsung/toro"/>
  <project name="device/samsung/torospr"/>
  <project name="device/samsung/tuna"/>
  <project name="device/ti/panda"/>
  <project name="platform/abi/cpp" path="abi/cpp"/>
  <project name="platform/bionic" path="bionic"/>
  <project name="platform/bootable/bootloader/legacy" path="bootable/bootloader/legacy"/>
  <project name="platform/bootable/diskinstaller" path="bootable/diskinstaller"/>
  <project name="platform/bootable/recovery" path="bootable/recovery"/>
  <project name="platform/build" path="build">
    <copyfile dest="Makefile" src="core/root.mk"/>
  </project>
  <project name="platform/cts" path="cts"/>
  <project name="platform/dalvik" path="dalvik"/>
  <!-- Some lines are omitted -->
</manifest>

其中,name表示項(xiàng)目模塊的名稱(chēng)以及在源碼服務(wù)器上的相對(duì)路徑。如果需要下載某個(gè)特定的模塊,只需要執(zhí)行~/bin/repo sync [name]

path表示項(xiàng)目的本地路徑。本地路徑也可以通過(guò)查看本地源碼根目錄下.repo/manifests/default.xml文件得到。

下載Android Linux Kernel源碼

  • 進(jìn)入Android源碼根目錄
$ cd ~/android/jellybean
$ mkdir kernel
$ cd kernel
  • 下載Kernel源碼
    Kernel部分的源碼可以直接通過(guò)git工具下載
$ git clone https://android.googlesource.com/kernel/common.git

由于Kernel源碼是與硬件平臺(tái)相關(guān)的,因此在下載時(shí)需要指定平臺(tái)類(lèi)型。也就是說(shuō),可以將該調(diào)指令中的common替換為sumsung, tegra等。

  • 切換到kernel 3.0分支
    由于Android JellyBean使用的是Linux 3.10內(nèi)核,因此需要切換到Kernel 3.10分支。
$ cd common
$ git branch -a
$ git checkout remotes/origin/Android-3.10

編譯Android上傳系統(tǒng)源碼

  • 導(dǎo)入預(yù)設(shè)腳本
~/android/jellybean $ source build/envsetup.sh
  • 指定產(chǎn)品名和編譯變量
~/android/jellybean $ lunch

You're building on Linux
Lunch menu... pick a combo:
     1. full-eng
     2. full_x86-eng
     3. vbox_x86-eng
     4. full_grouper-userdebug
     5. mini_armv7a_neon-userdebug
     6. mini_armv7a-userdebug
     7. full_wingray-userdebug
     8. full_crespo-userdebug
     9. full_maguro-userdebug
     10. full_panda-userdebug

Which would you like? [full-eng] 1

============================================
PLATFORM_VERSION_CODENAME=REL
PLATFORM_VERSION=4.1.1
TARGET_PRODUCT=full
TARGET_BUILD_VARIANT=eng
TARGET_BUILD_TYPE=release
TARGET_BUILD_APPS=
TARGET_ARCH=arm
TARGET_ARCH_VARIANT=armv7-a
HOST_ARCH=x86
HOST_OS=linux
HOST_OS_EXTRA=Linux-3.13.0-86-generic-x86_64-with-Ubuntu-14.04-trusty
HOST_BUILD_TYPE=release
BUILD_ID=JRO03H
OUT_DIR=out
============================================

lunch是envsetup.sh中提供的函數(shù),負(fù)責(zé)設(shè)置環(huán)境變量。full表示完全編譯,eng表示工程版。full-eng對(duì)應(yīng)模擬器設(shè)備。

  • 編譯源碼
    ** 編譯全部源碼
~/android/jellybean $ make

** 編譯指定模塊源碼

  1. make模塊名
    這種方法適合第一次編譯,會(huì)把依賴(lài)模塊一并編譯。對(duì)于應(yīng)用層源碼模塊,需要查看Android.mk中的LOCAL_PACKGAGE_NAME變量;對(duì)于框架層和系統(tǒng)運(yùn)行庫(kù)模塊,需要查看Android.mk中的LOCAL_MODULE變量。
  2. mmm命令
    該命令是envsetup.sh中注冊(cè)的函數(shù),用于在源碼根目錄編譯指定模塊,參數(shù)為模塊的相對(duì)路徑。只能在第一次編譯后使用。
  3. mm命令
    該命令是envsetup.sh中注冊(cè)的函數(shù),用于在模塊目錄下編譯模塊。只能在第一次編譯后使用。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容