初始化編譯環境 下載原始碼
初始化編譯環境 http://blog.csdn.net/snowolf_538/article/details/6697336
近日,下載了ANDROID的原始碼嘗試進行編譯,故針對其過程,根據Google的官方說明,進行一次翻譯,其原始網址為http://source.android.com/source/index.html,本文只針對Linux環境下的步驟進行翻譯。
注意:原始碼的大小大概2.6G,至少需要10G的空閒空間來進行編譯。(snowolf_538:我下載的Gingerbread總共大概佔了近6個G)
注意:使用虛擬機器Linux也是可以編譯ANDROID原始碼的,但是需要至少8G的記憶體/交換空間和至少12G的硬碟空間。(snowolf_538:事實上,不理解此處為什麼需要8G的記憶體/交換空間,我使用的是Ubuntu 11.04版本的虛擬機器,只設定了1G的記憶體和2G的交換空間,編譯沒有問題)
通常來講,需要:
- Python 2.4 -- 2.7,你可以從http://www.python.org/download/下載
- JDK6(如果編譯Gingerbread或者更新的版本),JDK5(Froyo或者更老的版本),你可以從http://java.sun.com/javase/downloads/下載
- Git 1.5.4或者更新,你可以從http://git-scm.com/download下載
- (可選)Valgrind,一個可以幫助發現記憶體洩露、棧損壞和陣列越界的工具,你可以從http://valgrind.org/downloads/current.html下載
以下步驟基於Ubuntu 10.04+
安裝JDK
JDK不再在Ubuntu的主包庫裡面,所以需要根據ANDROID的版本號下載對應的JDK。
JDK6:Gingerbread或者更新
- $ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
- $ sudo add-apt-repository "deb-src http://archive.canonical.com/ubuntu lucid partner"
- $ sudo apt-get update
- $ sudo apt-get install sun-java6-jdk
(snowolf_538:上面的第二句執行時會報錯,說是無效的地址,我實際使用的是sudo add-apt-repository "deb http://archive.canonical.com/ubuntu lucid parter")
JDK5:Froyo或者更老
- $ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu dapper main multiverse"
- $ sudo add-apt-repository "deb http://archive.ubuntu.com/ubuntu dapper-updates main multiverse"
- $ sudo apt-get update
- $ sudo apt-get install sun-java5-jdk
安裝必需的包
安裝以下必需的包以建立完整的編譯環境
- $ sudo apt-get install git-core gnupg flex bison gperf build-essential \
- zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \
- x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \
- libgl1-mesa-dev g++-multilib mingw32 tofrodos
(snowolf_538:以上包安裝時,其中lib32ncurses5-dev、ia32-libs、lib32readline5-dev和lib32z-dev無法找到,故使用libncurses5-dev、libreadline5-dev和libz-dev來代替,ia32-libs好像沒有影響)
配置USB訪問
在GNU/Linux系統下(特別是在Ubuntu系統下),一般使用者預設不能訪問USB裝置,我們需要配置使其可以訪問。
推薦的方法是用root使用者建立/etc/udev/rules.d/51-android.rules檔案,把以下的行拷貝到該檔案中。<username>必須被替換成實際使用USB去訪問手機的使用者名稱。
- # adb protocol on passion (Nexus One)
- SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e12", MODE="0600", OWNER="<username>"
- # fastboot protocol on passion (Nexus One)
- SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fff", MODE="0600", OWNER="<username>"
- # adb protocol on crespo (Nexus S)
- SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e22", MODE="0600", OWNER="<username>"
- # fastboot protocol on crespo (Nexus S)
- SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e20", MODE="0600", OWNER="<username>"
這些規則將會在下一次裝置插上的時候生效。
下載原始碼 http://blog.csdn.net/snowolf_538/article/details/6697530
安裝Repo
在ANDROID,Repo是一個用來使Git使用更方便的工具。想了解更多的Repo的資訊,請參見http://source.android.com/source/version-control.html。
為了安裝、初始化和配置Repo,需要以下步驟:
- 確保在你的主目錄下有一個bin目錄,並且其在你的PATH環境變數中
- $ mkdir ~/bin
- $ PATH=~/bin:$PATH
- 下載Repo指令碼並確保其可執行
- $ curl https://android.git.kernel.org/repo > ~/bin/repo
- $ chmod a+x ~/bin/repo
repo的MD5校驗為:bbf05a064c4d184550d71595a662e098
初始化Repo客戶端
安裝完Repo之後,建立客戶端以便能訪問ANDROID原始碼庫。
-
建立一個空目錄以存放工作檔案
- $ mkdir WORKING_DIRECTORY
- $ cd WORKING_DIRECTORY
-
執行repo init以下載最新的repo版本
- repo init -u git://android.git.kernel.org/platform/manifest.git
當要CHECK OUT一個特定的分支而不是主分支時,使用-b選項
- $ repo init -u git://android.git.kernel.org/platform/manifest.git -b froyo
-
當遇到提示時,請輸入你的真實姓名和電子郵件地址
當成功下載完之後,你的工作目錄下將建立一個.repo目錄用來存放所有的manifest資訊。
獲取原始碼
要下載ANDROID的原始碼,使用以下命令
- $ repo sync
這將下載ANDROID的原始碼到你的當前目錄下面。最初的sync操作將需要幾分鐘時間(snowolf_538:事實上,取決於你的網速)。想了解更多的repo sync命令和其他repo命令的資訊,請參考http://source.android.com/source/version-control.html
驗證Git標籤
裝載以下公鑰到你的GnuPG金鑰資料庫裡。
- $ gpg --import
拷貝和貼上以下的金鑰,然後輸入EOF(Ctrl+D)結束輸入。
- -----BEGIN PGP PUBLIC KEY BLOCK-----
- Version: GnuPG v1.4.2.2 (GNU/Linux)
- mQGiBEnnWD4RBACt9/h4v9xnnGDou13y3dvOx6/t43LPPIxeJ8eX9WB+8LLuROSV
- lFhpHawsVAcFlmi7f7jdSRF+OvtZL9ShPKdLfwBJMNkU66/TZmPewS4m782ndtw7
- 8tR1cXb197Ob8kOfQB3A9yk2XZ4ei4ZC3i6wVdqHLRxABdncwu5hOF9KXwCgkxMD
- u4PVgChaAJzTYJ1EG+UYBIUEAJmfearb0qRAN7dEoff0FeXsEaUA6U90sEoVks0Z
- wNj96SA8BL+a1OoEUUfpMhiHyLuQSftxisJxTh+2QclzDviDyaTrkANjdYY7p2cq
- /HMdOY7LJlHaqtXmZxXjjtw5Uc2QG8UY8aziU3IE9nTjSwCXeJnuyvoizl9/I1S5
- jU5SA/9WwIps4SC84ielIXiGWEqq6i6/sk4I9q1YemZF2XVVKnmI1F4iCMtNKsR4
- MGSa1gA8s4iQbsKNWPgp7M3a51JCVCu6l/8zTpA+uUGapw4tWCp4o0dpIvDPBEa9
- b/aF/ygcR8mh5hgUfpF9IpXdknOsbKCvM9lSSfRciETykZc4wrRCVGhlIEFuZHJv
- aWQgT3BlbiBTb3VyY2UgUHJvamVjdCA8aW5pdGlhbC1jb250cmlidXRpb25AYW5k
- cm9pZC5jb20+iGAEExECACAFAknnWD4CGwMGCwkIBwMCBBUCCAMEFgIDAQIeAQIX
- gAAKCRDorT+BmrEOeNr+AJ42Xy6tEW7r3KzrJxnRX8mij9z8tgCdFfQYiHpYngkI
- 2t09Ed+9Bm4gmEO5Ag0ESedYRBAIAKVW1JcMBWvV/0Bo9WiByJ9WJ5swMN36/vAl
- QN4mWRhfzDOk/Rosdb0csAO/l8Kz0gKQPOfObtyYjvI8JMC3rmi+LIvSUT9806Up
- hisyEmmHv6U8gUb/xHLIanXGxwhYzjgeuAXVCsv+EvoPIHbY4L/KvP5x+oCJIDbk
- C2b1TvVk9PryzmE4BPIQL/NtgR1oLWm/uWR9zRUFtBnE411aMAN3qnAHBBMZzKMX
- LWBGWE0znfRrnczI5p49i2YZJAjyX1P2WzmScK49CV82dzLo71MnrF6fj+Udtb5+
- OgTg7Cow+8PRaTkJEW5Y2JIZpnRUq0CYxAmHYX79EMKHDSThf/8AAwUIAJPWsB/M
- pK+KMs/s3r6nJrnYLTfdZhtmQXimpoDMJg1zxmL8UfNUKiQZ6esoAWtDgpqt7Y7s
- KZ8laHRARonte394hidZzM5nb6hQvpPjt2OlPRsyqVxw4c/KsjADtAuKW9/d8phb
- N8bTyOJo856qg4oOEzKG9eeF7oaZTYBy33BTL0408sEBxiMior6b8LrZrAhkqDjA
- vUXRwm/fFKgpsOysxC6xi553CxBUCH2omNV6Ka1LNMwzSp9ILz8jEGqmUtkBszwo
- G1S8fXgE0Lq3cdDM/GJ4QXP/p6LiwNF99faDMTV3+2SAOGvytOX6KjKVzKOSsfJQ
- hN0DlsIw8hqJc0WISQQYEQIACQUCSedYRAIbDAAKCRDorT+BmrEOeCUOAJ9qmR0l
- EXzeoxcdoafxqf6gZlJZlACgkWF7wi2YLW3Oa+jv2QSTlrx4KLM=
- =Wi5D
- -----END PGP PUBLIC KEY BLOCK-----
匯入金鑰之後,可以使用以下命令來驗證
- $ git tag -v TAG_NAME
編譯和執行 http://blog.csdn.net/snowolf_538/article/details/6698359
編譯ANDROID系統的基本順序如下,
初始化
使用envsetup.sh指令碼來初始化環境。
- $ source build/envsetup.sh
或者
- $ . build/envsetup.sh
選擇編譯目標
使用lunch命令來選擇編譯目標。確切的配置可以作為引數傳進去,如:
- $ lunch full-eng
上面的例子是一個針對emulator的完整的編譯,包括所有的除錯資訊都是使能的。
如果不帶引數執行lunch,將會提示選擇編譯目標。
所有的編譯目標使用BUILD-BUILDTYPE的格式來指定,其中BUILD指向一個特定的功能組合,如下所示:
Build Name |
Device |
Notes |
---|---|---|
generic |
emulator |
一般普通的配置 |
full |
emulator |
完整配置,包括所有的語言、應用和輸入法 |
full_crespo |
crespo |
完整配置,執行在Nexus S("Crespo") |
BUILDTYPE是下列之一:
Buildtype | Use |
---|---|
user | 有限制的訪問,適合於產品 |
userdebug | 和user相似,但是有root訪問和除錯能力,適合於除錯 |
eng | 開發配置,包含額外的除錯工具 |
關於更多為在實際裝置上執行編譯的資訊,請參考http://source.android.com/source/building-devices.html
編譯程式碼
使用make來編譯程式碼。GNU make能夠使用-jN引數來指定併發任務數,通常來說N的取值是計算機上準備用來進行編譯的硬體核心的1到2倍。例如,在雙E5520的機器上(2個CPU,每個CPU有4個core,每個core有2個thread),最快速的編譯可以指定為make -j16或者make -j32。
- $ make -j4
(snowolf_538:我在四核的機器上面指定make -j8,確實很快,4個核心都跑到100%)
執行
你可以在emulator上執行或者把它燒進實際的裝置中執行。請注意你已經通過lunch選擇了編譯的目標,最好不要在一個不同的平臺上執行。
燒進裝置
我們使用fastboot來燒進裝置。首先把裝置置於fastboot模式,這可以通過按住特定的按鍵組合來實現,也可以通過以下shell命令。
- $ adb reboot bootloader
一旦裝置處於fastboot模式,執行
- $ fastboot flashall -w
-w選項將擦除裝置上的/data分割槽,這在第一次燒進裝置的時候有用,但以後就不需要了。
關於更多為在實際裝置上執行編譯的資訊,請參考http://source.android.com/source/building-devices.html
模擬ANDROID裝置
emulator將會在編譯過程中自動新增到你的PATH路徑裡,執行
- $ emulator
相關文章
- Android 原始碼的下載和編譯環境的安裝及編譯Android原始碼編譯
- lnmp環境安裝-原始碼編譯LNMP原始碼編譯
- CentOS 7.4 環境下原始碼編譯安裝 postgreSQL 11.4CentOS原始碼編譯SQL
- Ubuntu環境編譯OpenJDK11原始碼Ubuntu編譯JDK原始碼
- grpc-java原始碼環境編譯RPCJava原始碼編譯
- tomcat原始碼編譯和環境搭建Tomcat原始碼編譯
- 原始碼的下載與編譯原始碼編譯
- Linux環境PostGIS原始碼編譯安裝Linux原始碼編譯
- openEuler arm 環境原始碼編譯mysql 8.0.37原始碼編譯MySql
- 彙編環境下的原始碼除錯原始碼除錯
- centos下編譯lnmp環境CentOS編譯LNMP
- CentOS 7.4 環境下原始碼編譯(多例項)安裝 Mysql 5.7.26CentOS原始碼編譯MySql
- Ubuntu 18.04(虛擬機器)環境下編譯Android 原始碼Ubuntu虛擬機編譯Android原始碼
- 《UNIX環境高階程式設計》apue原始碼Ubuntu下的編譯程式設計原始碼Ubuntu編譯
- Linux環境下原始碼編譯方式安裝MySQL5.1(3)Linux原始碼編譯MySql
- Linux環境下原始碼編譯方式安裝MySQL5.1(2)Linux原始碼編譯MySql
- Linux環境下原始碼編譯方式安裝MySQL5.1(1)Linux原始碼編譯MySql
- Ubuntu環境下載OpenJDK11原始碼UbuntuJDK原始碼
- qgroundcontrol開發環境搭建原始碼編譯開發環境原始碼編譯
- [環境搭建] 透過原始碼編譯安裝 Redis原始碼編譯Redis
- Android 11 原始碼下載+編譯教程Android原始碼編譯
- VLC在ubuntu環境下編譯編譯
- win10環境下fortran怎麼編譯_win10環境下fortran如何編譯Win10編譯
- Linux環境下, 原始碼編譯安裝詳解 (編譯CMake 3.15 和 gcc 5.3.0 為例)Linux原始碼編譯GC
- linux下apache+mysql+php開發環境純原始碼編譯搭建(轉)LinuxApacheMySqlPHP開發環境原始碼編譯
- Ubuntu下Android原始碼以及核心下載與編譯UbuntuAndroid原始碼編譯
- 從零搭建LNMP環境(一) - 編譯原始碼安裝PHPLNMP編譯原始碼PHP
- Elasticsearch6.1.2原始碼下載和編譯構建Elasticsearch原始碼編譯
- ubuntu 16.04 LTS 核心原始碼下載編譯流程Ubuntu原始碼編譯
- Kubernetes原始碼學習之一:下載和編譯原始碼原始碼編譯
- Linux 環境下編譯安裝 RedisLinux編譯Redis
- 比特幣原始碼研讀1——下載與編譯比特幣原始碼編譯
- 高通編譯環境搭建編譯
- openform環境搭建-編譯ORM編譯
- CentOS6.9原始碼編譯安裝nginx+php7+mysql環境CentOS原始碼編譯NginxPHPMySql
- spring原始碼閱讀環境(幾分鐘下載包)Spring原始碼
- Harmony OS 開發避坑指南——原始碼下載和編譯原始碼編譯
- 交叉編譯-Mac環境使用NDK編譯FFmpeg編譯Mac