日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > Android >内容正文

Android

Android: Android源码下载方法详解

發(fā)布時(shí)間:2024/8/1 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android: Android源码下载方法详解 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

安卓源碼下載地址: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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。