Android系統源代碼的下載與編譯


http://www.jianshu.com/p/aeaceda41798

目錄

1.簡介

之前二次開發Launcher的時候有同步過官方Android 4.1.2的源代碼,遺憾當時沒有記錄下載過程,現在重新溫習一下,其實也比較簡單。

2.官方同步源代碼

官網網址 需要翻牆
2.1新建一個用於存放下載腳本文件的目錄

mkdir ~/bin PATH=~/bin:$PATH

2.2下載Repo腳本文件

curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo chmod a+x ~/bin/repo

2.3創建用於存放Android源代碼的目錄

mkdir android_source cd android_source

2.4初始化

repo init -u https://android.googlesource.com/platform/manifest

上述命令會要求Repo下載最新的Android源代碼,也就是master分支,如果想下載其他分支

repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1

2.5同步Android源代碼

repo sync

下載過程保持網絡通暢,筆者網絡較慢,同步了快一整天。

3.鏡像同步源代碼

  • 對於沒有翻牆的用戶,可以使用清華大學的鏡像。
    https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
    3.1.1 同上述步驟,新建一個用於存放下載腳本文件的目錄

    mkdir ~/bin PATH=~/bin:$PATH

    3.1.2 下載Repo

    git clone https://aosp.tuna.tsinghua.edu.cn/android/git-repo.git/ cp git-repo/repo ~/bin/

    3.1.3 修改Repo文件
    ~/bin/repo

    REPO_URL = 'https://gerrit.googlesource.com/git-repo' 改為 REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'

    3.1.4 創建用於存放Android源代碼的目錄

    mkdir android_source cd android_source

    3.1.5 同步源代碼

    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1 repo sync -j4
  • 由於首次同步需要下載 24GB 數據,過程中任何網絡故障都可能造成同步失敗,建議直接使用初始化包進行初始化。
    3.2.1下載初始包

    #下載重試不限次數,防止網絡異常中斷 wget -c -t 0 https://mirrors.tuna.tsinghua.edu.cn/aosp-monthly/aosp-latest.tar tar -vxzf aosp-latest.tar cd aosp #這時ls的話什么也看不到,因為只有一個隱藏的.repo目錄 repo sync

    3.2.2選擇版本同步

    repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-4.0.1_r1 repo sync -j4

    下載好了就是下圖

源代碼目錄含義:

目錄名 描述
abi 應用程序二進制接口
bionic C/C++運行時庫,在NDK程序中很大一部分調用就是這里的程序
bootable 用於Android裝載和啟動程序,其中就包括bootloader和recovery。bootloader是Android中唯一在LInux內核之前執行的程序。通過這段程序可以初始化硬件,建立內存控件的映射圖等,總之,bootloader就是為LInux內核准備合適的運行環境。
build 用於編譯Android源代碼以及建議system.img,ramdisk.img等文件的工具
cts 用於兼容性測試的工具
dalvik Dalvik虛擬機的源代碼
development 高層的開發和調試工具
device 與設備相關的代碼
docs 包含與Android源代碼項目的文檔和工具,如Dalvik虛擬機格式文檔等
external 擴展工具的源代碼
framworks Android框架層源代碼。也就是Android SDK的源代碼
hardware 硬件層接口和庫
libcore Java核心庫
ndk NDK相關的源代碼
packages 與Android系統一同發布的應用程序的源代碼
prebuilts Android在各種平台下編譯之前要使用的工具
sdk 在開發環境中使用的工具,如ddms,draw9path,sdkmanager等
system Android的基本系統

注意:
查看所有分支

cd .repo/manifests git branch -a

如果想切換到其它分支可以重新執行

repo init -b android-6.0.1_r63 repo sync

4.已有源代碼更新

如果手上已有Android系統源代碼,可以通過代理遠程更新,不過速度可能會比較慢。另外還可以
4.1修改~/bin/repo文件

REPO_URL = 'https://gerrit.googlesource.com/git-repo' 改為 REPO_URL = 'https://gerrit-google.tuna.tsinghua.edu.cn/git-repo'

4.2修改源代碼目錄.repo/manifests.git/config

url = https://android.googlesource.com/platform/manifest 改為 url = https://aosp.tuna.tsinghua.edu.cn/platform/manifest

4.3修改源代碼目錄.repo/manifest.xml

<manifest>

   <remote  name="aosp" - fetch="https://android.googlesource.com" + fetch="https://aosp.tuna.tsinghua.edu.cn" review="android-review.googlesource.com" /> <remote name="github"

最后直接同步即可

repo sync -j4

5.1編譯Android 4.1.2

筆者下載的是Android 4.1.2源代碼。
默認的源代碼僅能在64位機器上編譯。編譯過程有很多坑,要有心里准備。
5.1.1進入源碼目錄初始化編譯環境

source build/envsetup.sh

5.1.2選擇目標

lunch full-eng

設置編譯目標為full-eng,表示正對所有的移動設備,Android模擬器有效,並打開所有的調試選項。
只執行lunch命令,會出現對應的選項

5.1.3編譯Android源代碼
make命令只會利用一個CPU核進行編譯,如果是多核CPU,為了縮短時間,可以加上-jn參數。
注意:

#Android 4.1.2源代碼編譯要求 筆記本OS: Ubuntu 16.04 x64 GNU Make版本: 3.8.1或者3.8.2(筆者用的是3.8.2) JDK 版本: JDK 1.6

編譯過程你很可能會碰到如下問題

1. /bin/bash: xsltproc: 未找到命令 2. /bin/bash: flex: 未找到命令 3. /bin/bash: bison: 未找到命令 4. sh: 1: gperf: not found 5. /bin/bash: xmllint: 未找到命令 6. failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 2 7. /usr/include/stdlib.h:759:34: fatal error: bits/stdlib-bsearch.h: No such file or directory

建議提前安裝好下列必要依賴

sudo apt-get install xsltproc flex bison gperf libxml2-utils libswitch-perl gcc-multilib

最后開始編譯

make -j4

筆者筆記本編譯花了接近3個小時

5.2編譯Android 5.1.1

源代碼的下載參考上述步驟
環境配置

#公司的台式機
本機OS: Ubuntu 14.04 x64 JDK版本: openjdk 1.7

配置過程同上,編譯過程中如果出現

You asked for an OpenJDK 7 build but your version is java version "1.7.0_79" Java(TM) SE Runtime Environment (build 1.7.0_79-b15) Java HotSpot(TM) 64-Bit Server VM (build 24.79-b02, mixed mode).

建議更換JDK為openjdk 1.7

apt-get install openjdk-7-jdk

如果出現

/bin/bash: build/tools/findleaves.py: 權限不夠

直接給文件加上執行權限,筆者是直接在源碼目錄

chmod a+x -R *

筆者編譯完大概也是3個多小時,過程跟4.12編譯差不多

啟動模擬器

emulator &

如圖

注意:幾個很有用的命令。

make -k 繼續編譯 m 編譯完整的Android源代碼 mm 此命令必須進入指定的工程的目錄進行編譯 mmm 可以在任何一級目錄編譯任意指定的工程

6.參考

https://source.android.com/source/downloading.html
https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
http://blog.csdn.net/michaelpp/article/details/22801953
http://blog.csdn.net/ambulong/article/details/51627115
《Android 深度探索(卷1):HAL與驅動開發》


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM