Android: Android源码下载方法详解
安卓源碼下載地址:http://source.android.com/source/downloading.html
相信很多下載過(guò)內(nèi)核的人都對(duì)這個(gè)很熟悉
git?clone git://android.git.kernel.org/kernel/common.git kernel
但是這是在以前,現(xiàn)在如果這么執(zhí)行的話,會(huì)顯示如下內(nèi)容
Initialized empty Git repository in /home/star/working/kernel/.git/
android.git.kernel.org[0: 149.20.4.77]: errno=Connection refused
fatal: unable to connect a socket (Connection refused)
通過(guò)瀏覽器輸入http://android.git.kernel.org/,發(fā)現(xiàn)該網(wǎng)站已經(jīng)被重定向?yàn)閔ttp://source.android.com/source/downloading.html
可以在該頁(yè)面的最后發(fā)現(xiàn)內(nèi)核的下載方法。
?
下面我們介紹一下Android源碼下載的步驟。
工作環(huán)境:
操作系統(tǒng):Ubuntu 10.04???或? Ubuntu10.10
git程序?:1.7.0.4? 或 1.7.1
轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/pku_android
方法一:
1.1 初始化安裝環(huán)境
參考網(wǎng)頁(yè)http://source.android.com/source/initializing.html
主要要做的就是安裝jdk和安裝一些軟件包
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \
? zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \
? libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \
? libxml2-utils
如果已經(jīng)安裝了,就不許要這步了
1.2 無(wú)論下載內(nèi)核和源碼,都需要進(jìn)行如下操作
參考網(wǎng)頁(yè)http://source.android.com/source/downloading.html
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl?https://dl-ssl.google.com/dl/googlesource/git-repo/repo?> ~/bin/repo
如果出現(xiàn):?repo init error: could not verify the tag 'v1.12.7',執(zhí)行下面的命令:
curl?http://commondatastorage.googleapis.com/git-repo-downloads/repo?> ~/bin/repo
$ chmod a+x ~/bin/repo
建立一個(gè)文件夾,以便下載的內(nèi)容保存其中
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
@@@ 以下可以腳本實(shí)現(xiàn)autogit.rar?@@@
1.3 內(nèi)核下載
$ git clone?https://android.googlesource.com/kernel/common.git?kernel
命令行最后面的kernel的意思是保存在這個(gè)文件夾下,所以可以是任何名字,該文件夾不需要自己去創(chuàng)建,最后的這個(gè)不寫也沒(méi)問(wèn)題
如果想下載其他版本的內(nèi)核
$ git clone?https://android.googlesource.com/kernel/goldfish.git
$ git clone?https://android.googlesource.com/kernel/msm.git
$ git clone?https://android.googlesource.com/kernel/omap.git
$ git clone?https://android.googlesource.com/kernel/samsung.git
$ git clone?https://android.googlesource.com/kernel/tegra.git
下載過(guò)程中,會(huì)有如下信息,速度快慢取決于網(wǎng)速了。
Initialized empty Git repository in /home/star/kernel/kernel/.git/
remote: Counting objects: 40, done
remote: Counting objects: 2073952, done
remote: Finding sources: 100% (208/208)
remote: Getting sizes: 100% (88/88)
remote: Compressing objects: 100% (2/2)
remote: Total 2073863 (delta 1735363), reused 2073862 (delta 1735363)
Receiving objects: 100% (2073863/2073863), 427.93 MiB | 318 KiB/s, done.
Resolving deltas: 100% (1735382/1735382), done.
在我下載的過(guò)程中,出現(xiàn)了如下問(wèn)題
error: RPC failed; result=56, HTTP code = 2002 MiB | 23 KiB/s?
到現(xiàn)在我也不清楚是由于什么原因?qū)е碌?#xff0c;猜測(cè)
1.1中所說(shuō)的事情,都做了嗎?我發(fā)現(xiàn)有一些安裝包尚未安裝,安裝之。
或者,可能是網(wǎng)絡(luò)問(wèn)題,重復(fù)執(zhí)行一下,會(huì)發(fā)現(xiàn)并不是在同一個(gè)地方出現(xiàn)這個(gè)問(wèn)題的,說(shuō)不定哪次就成功了
或者,用別人的電腦下載一下(雖然方法是我發(fā)現(xiàn)的,可是并不是我第一個(gè)下載成功的,我遇到了RPC failed,后來(lái)讓同學(xué)嘗試,成功,之后我也嘗試了,在把所需要的安裝包都安裝后,也成功)
1.4 更換內(nèi)核版本
由于在1.3中我寫的是kernel,這是可以看到當(dāng)前目錄下出現(xiàn)了一個(gè)kernel文件夾
$ cd kernel/
$ ls
發(fā)現(xiàn)沒(méi)有任何內(nèi)容
查看當(dāng)前內(nèi)核版本,master,不知道是什么意思
$ git branch
* master
查看所有可用內(nèi)核版本
$ git branch -a
* master
? remotes/origin/HEAD -> origin/master
? remotes/origin/android-2.6.39
? remotes/origin/android-3.0
? remotes/origin/master
可以看到目前只提供了少數(shù)的版本,只有2.6.39和3.0,比如我要下載2.6.39
$ git checkout -b android-2.6.39 origin/android-2.6.39
Switched to a new branch 'android-2.6.39'
該命令的android-2.6.39指的是分支的名字,其實(shí)是可以隨便取的,關(guān)鍵是origin/android-2.6.39,要對(duì)應(yīng)git branch -a命令顯示的remotes后面的內(nèi)容
完成后,查詢當(dāng)前分支
$ git branch
* android-2.6.39
? master
$ ls
arch???? Documentation? init???? lib????????? README????????? sound
block??? drivers??????? ipc????? MAINTAINERS? REPORTING-BUGS? tools
COPYING? firmware?????? Kbuild?? Makefile???? samples???????? usr
CREDITS? fs???????????? Kconfig? mm?????????? scripts???????? virt
crypto?? include??????? kernel?? net????????? security
會(huì)看到突然出現(xiàn)很多文件夾,這就是內(nèi)核了
由于誤操作
比如$ git checkout -b android-2.6.39 origin/android-2.6.39,只是輸入$ git checkout -b android-2.6.39,這時(shí),會(huì)得到一個(gè)空的分支
$ git branch -a
* android-2.6.39
? master
? remotes/origin/HEAD -> origin/master
? remotes/origin/android-2.6.39
? remotes/origin/android-3.0
? remotes/origin/master
如果再次執(zhí)行
$ git checkout -b android-2.6.39 origin/android-2.6.39
fatal: git checkout: branch android-2.6.39 already exists
一種方法,就是給把-b后面的android-2.6.39改為其他名字,但是這個(gè)有問(wèn)題的分支android-2.6.39還是會(huì)存在的
查看$ git branch --help,找到分支刪除的命令
$ git branch -D android-2.6.39
error: Cannot delete the branch 'android-2.6.39' which you are currently on.
需要切換分支,假設(shè)也存在android-3.0,當(dāng)然也可以切換為master或者其他存在的分支,$ git branch -a查看分支
$ git checkout android-3.0
Checking out files: 100% (37131/37131), done.
Switched to branch 'android-3.0'
$ git branch -D android-2.6.39
Deleted branch android-2.6.39 (was fe8bf45).
方法二
2.1 參考1.1和1.2
2.2 類似于下載Android源碼的過(guò)程,先執(zhí)行如下命令
$ repo init -u?https://android.googlesource.com/platform/manifest
如果要下載指定版本:
$?repo?init?-u?https://android.googlesource.com/platform/manifest?-b??android-4.4_r1
在這一步還需要用到gmail的郵箱
備注:
在下載Android源碼的過(guò)程中,并不會(huì)下載kernel,那怎樣才能既下載源碼,又下載kernel呢
參考網(wǎng)頁(yè)http://elinux.org/Android_Kernel_Download
?a kernel git tree并沒(méi)有被默認(rèn)的Android manifest file引用既然沒(méi)有引用,那就加上它
修改.repo/manifest.xml(目前的目錄為1.2中已經(jīng)建立的WORKING_DIRECTORY)
$ vim .repo/manifest.xml
加上這條語(yǔ)句
<project path="kernel/common" name="kernel/common" revision="android-2.6.39"/>
位置我覺(jué)得和其它的project選項(xiàng)并列即可。
版本號(hào)參考1.4,可能只能下載2.6.39和3.0
2.3 下載源碼和內(nèi)核reposync.rar
$ repo sync
漫長(zhǎng)的等待
~..~只下載內(nèi)核
如果我只想下載內(nèi)核呢
很簡(jiǎn)單,修改2.2提到的文件.repo/manifest.xml,把所有project標(biāo)簽都刪除,再添加
<project path="kernel/common" name="kernel/common" revision="android-2.6.39"/>
編譯環(huán)境的搭建
首先若是沒(méi)有修改源,請(qǐng)修改為國(guó)內(nèi)的源,從而提高軟件的下載安裝的速度
可以參考下面博客的內(nèi)容添加一些速度快的源,如:臺(tái)灣源、Ubuntu官方上海源、網(wǎng)易、搜狐、
http://hi.baidu.com/houxn22/item/48f0f7d150657c16d80e4468
安裝編譯所需的軟件
1、?安裝jdk
官方推薦安裝jdk1.6的,現(xiàn)在不支持命令安裝了,只有Oracle官網(wǎng)下載,或者可以在本人百度網(wǎng)盤下面的地址中下載:
http://pan.baidu.com/share/link?shareid=2263608836&uk=4278685087
打開(kāi)后選擇jdk-6u45-linux-x64.bin。
安裝完后修改環(huán)境變量。
2、?安裝其它一些編譯所需軟件
在終端中執(zhí)行: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?python-markdown?\
libxml2-utils?xsltproc
基本只要安裝以上軟件即可,官方網(wǎng)站上說(shuō)的其它一些軟件或者設(shè)置可以不用理會(huì)。
注:此步可能會(huì)出現(xiàn)錯(cuò)誤,請(qǐng)查看本文最后部分的說(shuō)明
編譯源代碼
3.1編譯初始化:
在終端中執(zhí)行:
source?build/envsetup.sh
或:
.?build/envsetup.sh
執(zhí)行后輸出:
source?build/envsetup.sh?including?device/asus/grouper/vendorsetup.shincluding?device/asus/tilapia/vendorsetup.shincluding?device/generic/armv7-a-neon/vendorsetup.shincluding?device/generic/armv7-a/vendorsetup.shincluding?device/generic/mips/vendorsetup.shincluding?device/generic/x86/vendorsetup.shincluding?device/samsung/maguro/vendorsetup.shincluding?device/samsung/manta/vendorsetup.shincluding?device/samsung/toroplus/vendorsetup.shincluding?device/samsung/toro/vendorsetup.shincluding?device/ti/panda/vendorsetup.shincluding?sdk/bash_completion/adb.bash
3.2選擇編譯目標(biāo):
在終端中執(zhí)行下面的命令:
lunch
之后選擇你要編譯的設(shè)備,選擇后,會(huì)初始化編譯的項(xiàng)目的相關(guān)文件。
3.3編譯代碼:
在終端中執(zhí)行:make?-j4
-j4:表示用四個(gè)線程來(lái)編譯
編譯根據(jù)不同機(jī)器的配置不同所需時(shí)間也有很大差異。
出現(xiàn)以下信息表示編譯完成:
target?Java:?ContactsTests?(out/target/common/obj/APPS/ContactsTests_intermediates/classes)
target?Dex:?Contacts
Done!
Install:?out/target/product/generic/system/app/Browser.odex
Install:?out/target/product/generic/system/app/Browser.apk
Note:?Some?input?files?use?or?override?a?deprecated?API.
Note:?Recompile?with?-Xlint:deprecation?for?details.
Copying:?out/target/common/obj/APPS/Contacts_intermediates/noproguard.classes.dex
target?Package:?Contacts?(out/target/product/generic/obj/APPS/Contacts_intermediates/package.apk)
?'out/target/common/obj/APPS/Contacts_intermediates/classes.dex'?as?'classes.dex'...
Processing?target/product/generic/obj/APPS/Contacts_intermediates/package.apk
Done!
Install:?out/target/product/generic/system/app/Contacts.odex
Install:?out/target/product/generic/system/app/Contacts.apk
build/tools/generate-notice-files.py??out/target/product/generic/obj/NOTICE.txt??out/target/product/generic/obj/NOTICE.html?"Notices?for?files?contained?in?the?filesystem?images?in?this?directory:"?out/target/product/generic/obj/NOTICE_FILES/src
Combining?NOTICE?files?into?HTML
Combining?NOTICE?files?into?text
Installed?file?list:?out/target/product/generic/installed-files.txt
Target?system?fs?image:?out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Running:??mkyaffs2image?-f?out/target/product/generic/system?out/target/product/generic/obj/PACKAGING/systemimage_intermediates/system.img
Install?system?fs?image:?out/target/product/generic/system.img
DroidDoc?took?5331?sec.?to?write?docs?to?out/target/common/docs/doc-comment-check
編譯可能出現(xiàn)的錯(cuò)誤,請(qǐng)查看本文最后部分的說(shuō)明
4、運(yùn)行模擬器
在終端中執(zhí)行:emulator
運(yùn)行模擬器可能出現(xiàn)的錯(cuò)誤,請(qǐng)查看本文最后部分的說(shuō)明
5、相關(guān)問(wèn)題的解決辦法
5.1?下載源代碼可能會(huì)提示的錯(cuò)誤
5.1.1error:?Exited?sync?due?to?fetch?errors...
方法一:不理會(huì)他,重新執(zhí)行repo?sync命令。
方法二:
關(guān)于這個(gè)問(wèn)題其實(shí)google是有說(shuō)明的http://source.android.com/source/downloading.html,為了防止連接數(shù)過(guò)多,每個(gè)ip都需要認(rèn)證。。。
第一步:從這里the?password?generator獲取用戶名和密碼,前提是你在之前填寫了你的真實(shí)姓名和郵箱
第二步:將上面的頁(yè)面上以machine開(kāi)頭的兩行復(fù)制到??~/.netrc文件中
第三步:repo?init?-u?https://android.googlesource.com/a/platform/manifest??多了個(gè)“/a”
然后就可以repo?sync了
特別注意.netrc文件是在用戶的根目錄下,root用戶就是/目錄下,如果沒(méi)有的話就自己建一個(gè),把權(quán)限改為?*00
5.1.2若是出現(xiàn)這個(gè)錯(cuò)誤:Exited?sync?due?to?gc?errors?
表示代碼基本下載完,需要從repo里面導(dǎo)出來(lái),但是git的版本太低,不支持1.72以下版本。
添加這個(gè)源:deb?http://ftp.de.debian.org/debian?sid?main。
在終端中執(zhí)行:gedit?/etc/apt/source.list
在文件的最后添加deb?http://ftp.de.debian.org/debian?sid?main,并保存退出
回到終端中執(zhí)行:sudo?apt-get?update
更新完后,安裝高版本的git工具
在終端中執(zhí)行:sudo?apt-get?install?git-core
5.2安裝編譯環(huán)境的軟件可能會(huì)出現(xiàn)的問(wèn)題
下列軟件包有未滿足的依賴關(guān)系:?libasound2:?破壞:?libasound2-plugins?(<?1.0.24-0ubuntu3)?但是?1.0.22-0ubuntu6?正要被安裝??libglib2.0-0:?破壞:?gnome-control-center?(<?1:3)?但是?1:2.30.0-0ubuntu4?正要被安裝??ppp:?破壞:?network-manager?(<=?0.8.0.999-1)?但是?0.8-0ubuntu3?正要被安裝E:?破損的軟件包
某些源有問(wèn)題,為高版本?ubuntu的源?,刪除即可,如安裝高版本的git所用的源就是ubuntu?10.4之后的源,用在10.04上就可以會(huì)有問(wèn)題,引起此提示。
在終端中執(zhí)行:gedit?/etc/apt/source.list
把文件的最后?deb?http://ftp.de.debian.org/debian?sid?main?刪除,并保存退出
回到終端中執(zhí)行:sudo?apt-get?update
再次重新安裝編譯環(huán)境的軟件
5.3、編譯可能會(huì)遇到的問(wèn)題:
5.3.1運(yùn)行make命令后,提示以下錯(cuò)誤:/bin/bash:?java:?command?not?found
首先檢查是否確實(shí)安裝了jdk,在終端中輸入:java?-version?,若是有安裝jdk,就會(huì)顯示jdk的版本信息,提示出錯(cuò),說(shuō)明沒(méi)有安裝jdk,那么就安裝jdk。
安裝jdk后還是提示上面的錯(cuò)誤信息,則按執(zhí)行以下命令建立鏈接文件來(lái)解決問(wèn)題:
sudo?ln?-s?/jdk1.6.0_21/bin/jar?~/bin/jar
sudo?ln?-s?/jdk1.6.0_21/bin/java?~/bin/java
sudo?ln?-s?/jdk1.6.0_21/bin/javac?~/bin/javac
sudo?ln?-s?/jdk1.6.0_21/bin/javah?~/bin/javah
sudo?ln?-s?/jdk1.6.0_21/bin/javadoc?~/bin/javadoc
重新編譯若還是提示一樣的錯(cuò)誤,再執(zhí)行下面的命令:
sudo?ln?-s?/jdk1.6.0_21/bin/jar?/bin/jar
sudo?ln?-s?/jdk1.6.0_21/bin/java?/bin/java
sudo?ln?-s?/jdk1.6.0_21/bin/javac?/bin/javac
sudo?ln?-s?/jdk1.6.0_21/bin/javah?/bin/javah
sudo?ln?-s?/jdk1.6.0_21/bin/javadoc?/bin/javadoc
至此java的問(wèn)題應(yīng)該可以解決
5.3.2?編譯出現(xiàn)以下錯(cuò)誤提示:
============================================
Checking?build?tools?versions...
************************************************************
You?are?attempting?to?build?with?the?incorrect?version
of?java.
?Your?version?is:?java?version?"1.6.0_24".
The?correct?version?is:?Java?SE?1.6.
?Please?follow?the?machine?setup?instructions?at
????https://source.android.com/source/download.html
************************************************************
build/core/main.mk:141:?***?stop。?停止。
切換從普通用戶登,然后修改源碼目錄的存取權(quán)限:chmod?777?src
之后再運(yùn)行編譯命令再次編譯
5.3.3?No?command?'lunch'?found,?did?you?mean:
解決方法:
運(yùn)行以下命令:
source?build/envsetup.sh
之后再次運(yùn)行編譯命令:lunch?full-eng或lunch?full-user?……..
5.4運(yùn)行模擬器可能會(huì)出現(xiàn)的問(wèn)題:
No?command?'emulator'?found,?did?you?mean:
編譯成功之后,在終端運(yùn)行emulator命令,卻提示:?
No?command?'emulator'?found,?did?you?mean:
Command?'qemulator'?from?package?'qemulator'?(universe)
emulator:?command?not?found
解決方法:
重新運(yùn)行以下命令:
source?build/envsetup.sh
lunch?full-eng
之后再次運(yùn)行?emulator??命令
?
轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/pku_android
總結(jié)
以上是生活随笔為你收集整理的Android: Android源码下载方法详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: FPGA 20个例程篇:7.FLASH读
- 下一篇: Android源码下载地址