Android: Android源码下载方法详解
安卓源碼下載地址:http://source.android.com/source/downloading.html
相信很多下載過內核的人都對這個很熟悉
git?clone git://android.git.kernel.org/kernel/common.git kernel
但是這是在以前,現在如果這么執行的話,會顯示如下內容
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)
通過瀏覽器輸入http://android.git.kernel.org/,發現該網站已經被重定向為http://source.android.com/source/downloading.html
可以在該頁面的最后發現內核的下載方法。
?
下面我們介紹一下Android源碼下載的步驟。
工作環境:
操作系統:Ubuntu 10.04???或? Ubuntu10.10
git程序?:1.7.0.4? 或 1.7.1
轉載請注明出處:http://blog.csdn.net/pku_android
方法一:
1.1 初始化安裝環境
參考網頁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
如果已經安裝了,就不許要這步了
1.2 無論下載內核和源碼,都需要進行如下操作
參考網頁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
如果出現:?repo init error: could not verify the tag 'v1.12.7',執行下面的命令:
curl?http://commondatastorage.googleapis.com/git-repo-downloads/repo?> ~/bin/repo
$ chmod a+x ~/bin/repo
建立一個文件夾,以便下載的內容保存其中
$ mkdir WORKING_DIRECTORY
$ cd WORKING_DIRECTORY
@@@ 以下可以腳本實現autogit.rar?@@@
1.3 內核下載
$ git clone?https://android.googlesource.com/kernel/common.git?kernel
命令行最后面的kernel的意思是保存在這個文件夾下,所以可以是任何名字,該文件夾不需要自己去創建,最后的這個不寫也沒問題
如果想下載其他版本的內核
$ 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
下載過程中,會有如下信息,速度快慢取決于網速了。
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.
在我下載的過程中,出現了如下問題
error: RPC failed; result=56, HTTP code = 2002 MiB | 23 KiB/s?
到現在我也不清楚是由于什么原因導致的,猜測
1.1中所說的事情,都做了嗎?我發現有一些安裝包尚未安裝,安裝之。
或者,可能是網絡問題,重復執行一下,會發現并不是在同一個地方出現這個問題的,說不定哪次就成功了
或者,用別人的電腦下載一下(雖然方法是我發現的,可是并不是我第一個下載成功的,我遇到了RPC failed,后來讓同學嘗試,成功,之后我也嘗試了,在把所需要的安裝包都安裝后,也成功)
1.4 更換內核版本
由于在1.3中我寫的是kernel,這是可以看到當前目錄下出現了一個kernel文件夾
$ cd kernel/
$ ls
發現沒有任何內容
查看當前內核版本,master,不知道是什么意思
$ git branch
* master
查看所有可用內核版本
$ git branch -a
* master
? remotes/origin/HEAD -> origin/master
? remotes/origin/android-2.6.39
? remotes/origin/android-3.0
? remotes/origin/master
可以看到目前只提供了少數的版本,只有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指的是分支的名字,其實是可以隨便取的,關鍵是origin/android-2.6.39,要對應git branch -a命令顯示的remotes后面的內容
完成后,查詢當前分支
$ 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
會看到突然出現很多文件夾,這就是內核了
由于誤操作
比如$ git checkout -b android-2.6.39 origin/android-2.6.39,只是輸入$ git checkout -b android-2.6.39,這時,會得到一個空的分支
$ 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
如果再次執行
$ 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改為其他名字,但是這個有問題的分支android-2.6.39還是會存在的
查看$ git branch --help,找到分支刪除的命令
$ git branch -D android-2.6.39
error: Cannot delete the branch 'android-2.6.39' which you are currently on.
需要切換分支,假設也存在android-3.0,當然也可以切換為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源碼的過程,先執行如下命令
$ 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源碼的過程中,并不會下載kernel,那怎樣才能既下載源碼,又下載kernel呢
參考網頁http://elinux.org/Android_Kernel_Download
?a kernel git tree并沒有被默認的Android manifest file引用既然沒有引用,那就加上它
修改.repo/manifest.xml(目前的目錄為1.2中已經建立的WORKING_DIRECTORY)
$ vim .repo/manifest.xml
加上這條語句
<project path="kernel/common" name="kernel/common" revision="android-2.6.39"/>
位置我覺得和其它的project選項并列即可。
版本號參考1.4,可能只能下載2.6.39和3.0
2.3 下載源碼和內核reposync.rar
$ repo sync
漫長的等待
~..~只下載內核
如果我只想下載內核呢
很簡單,修改2.2提到的文件.repo/manifest.xml,把所有project標簽都刪除,再添加
<project path="kernel/common" name="kernel/common" revision="android-2.6.39"/>
編譯環境的搭建
首先若是沒有修改源,請修改為國內的源,從而提高軟件的下載安裝的速度
可以參考下面博客的內容添加一些速度快的源,如:臺灣源、Ubuntu官方上海源、網易、搜狐、
http://hi.baidu.com/houxn22/item/48f0f7d150657c16d80e4468
安裝編譯所需的軟件
1、?安裝jdk
官方推薦安裝jdk1.6的,現在不支持命令安裝了,只有Oracle官網下載,或者可以在本人百度網盤下面的地址中下載:
http://pan.baidu.com/share/link?shareid=2263608836&uk=4278685087
打開后選擇jdk-6u45-linux-x64.bin。
安裝完后修改環境變量。
2、?安裝其它一些編譯所需軟件
在終端中執行: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
基本只要安裝以上軟件即可,官方網站上說的其它一些軟件或者設置可以不用理會。
注:此步可能會出現錯誤,請查看本文最后部分的說明
編譯源代碼
3.1編譯初始化:
在終端中執行:
source?build/envsetup.sh
或:
.?build/envsetup.sh
執行后輸出:
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選擇編譯目標:
在終端中執行下面的命令:
lunch
之后選擇你要編譯的設備,選擇后,會初始化編譯的項目的相關文件。
3.3編譯代碼:
在終端中執行:make?-j4
-j4:表示用四個線程來編譯
編譯根據不同機器的配置不同所需時間也有很大差異。
出現以下信息表示編譯完成:
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
編譯可能出現的錯誤,請查看本文最后部分的說明
4、運行模擬器
在終端中執行:emulator
運行模擬器可能出現的錯誤,請查看本文最后部分的說明
5、相關問題的解決辦法
5.1?下載源代碼可能會提示的錯誤
5.1.1error:?Exited?sync?due?to?fetch?errors...
方法一:不理會他,重新執行repo?sync命令。
方法二:
關于這個問題其實google是有說明的http://source.android.com/source/downloading.html,為了防止連接數過多,每個ip都需要認證。。。
第一步:從這里the?password?generator獲取用戶名和密碼,前提是你在之前填寫了你的真實姓名和郵箱
第二步:將上面的頁面上以machine開頭的兩行復制到??~/.netrc文件中
第三步:repo?init?-u?https://android.googlesource.com/a/platform/manifest??多了個“/a”
然后就可以repo?sync了
特別注意.netrc文件是在用戶的根目錄下,root用戶就是/目錄下,如果沒有的話就自己建一個,把權限改為?*00
5.1.2若是出現這個錯誤:Exited?sync?due?to?gc?errors?
表示代碼基本下載完,需要從repo里面導出來,但是git的版本太低,不支持1.72以下版本。
添加這個源:deb?http://ftp.de.debian.org/debian?sid?main。
在終端中執行:gedit?/etc/apt/source.list
在文件的最后添加deb?http://ftp.de.debian.org/debian?sid?main,并保存退出
回到終端中執行:sudo?apt-get?update
更新完后,安裝高版本的git工具
在終端中執行:sudo?apt-get?install?git-core
5.2安裝編譯環境的軟件可能會出現的問題
下列軟件包有未滿足的依賴關系:?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:?破損的軟件包
某些源有問題,為高版本?ubuntu的源?,刪除即可,如安裝高版本的git所用的源就是ubuntu?10.4之后的源,用在10.04上就可以會有問題,引起此提示。
在終端中執行:gedit?/etc/apt/source.list
把文件的最后?deb?http://ftp.de.debian.org/debian?sid?main?刪除,并保存退出
回到終端中執行:sudo?apt-get?update
再次重新安裝編譯環境的軟件
5.3、編譯可能會遇到的問題:
5.3.1運行make命令后,提示以下錯誤:/bin/bash:?java:?command?not?found
首先檢查是否確實安裝了jdk,在終端中輸入:java?-version?,若是有安裝jdk,就會顯示jdk的版本信息,提示出錯,說明沒有安裝jdk,那么就安裝jdk。
安裝jdk后還是提示上面的錯誤信息,則按執行以下命令建立鏈接文件來解決問題:
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
重新編譯若還是提示一樣的錯誤,再執行下面的命令:
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的問題應該可以解決
5.3.2?編譯出現以下錯誤提示:
============================================
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。?停止。
切換從普通用戶登,然后修改源碼目錄的存取權限:chmod?777?src
之后再運行編譯命令再次編譯
5.3.3?No?command?'lunch'?found,?did?you?mean:
解決方法:
運行以下命令:
source?build/envsetup.sh
之后再次運行編譯命令:lunch?full-eng或lunch?full-user?……..
5.4運行模擬器可能會出現的問題:
No?command?'emulator'?found,?did?you?mean:
編譯成功之后,在終端運行emulator命令,卻提示:?
No?command?'emulator'?found,?did?you?mean:
Command?'qemulator'?from?package?'qemulator'?(universe)
emulator:?command?not?found
解決方法:
重新運行以下命令:
source?build/envsetup.sh
lunch?full-eng
之后再次運行?emulator??命令
?
轉載請注明出處:http://blog.csdn.net/pku_android
總結
以上是生活随笔為你收集整理的Android: Android源码下载方法详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FPGA 20个例程篇:7.FLASH读
- 下一篇: IIS6/IIS7无法打开IIS管理器的