|
Google于2013.07.25發(fā)布了Android4.3的源碼及其相關(guān)產(chǎn)品,下面把本人在ubuntu10.04 的64位系統(tǒng)上下載源碼,和編譯源碼做個(gè)記錄備份,也供有需要的人參考,難免有錯(cuò),敬請(qǐng)見諒,還忘勿吝嗇指出。 源代碼下載、編譯環(huán)境安裝、源代碼編譯和運(yùn)行模擬器的過程中可能會(huì)出現(xiàn)的一些錯(cuò)誤在本文最后一章節(jié),若出現(xiàn)類似錯(cuò)誤,可以參考。 1、 源碼的下載 源代碼的下載,首先需要安裝以下工具軟件:curl 和 git-core 1.1安裝curl: 打開終端,可以使用按Ctrl+Alt +T的快捷方式打開終端 在終端中執(zhí)行命令:sudo apt-get install curl 1.2安裝git-core 1.2.1在用戶目錄下新建bin目錄 在終端中執(zhí)行:mkdir ~/bin 1.2.2安裝git-core 在終端中執(zhí)行:curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo 給repo執(zhí)行權(quán)限:chmod a+x ~/bin/repo 注:若是下載repo失敗可以到我百度網(wǎng)盤中去下載,下面給出鏈接: http://pan.baidu.com/share/link?shareid=3522233410&uk=4278685087 將~/bin添加環(huán)境變量,作用是:git軟件下載安裝在此目錄,在別的目錄運(yùn)行可能提示出錯(cuò):會(huì)找不到此軟件。 在終端中執(zhí)行命令:PATH=~/bin:$PATH 1.3 下載源代碼 1.3.1進(jìn)入要源代碼將要保存的目錄 如我的源代碼保存在:、/opt/android4.3 在終端中執(zhí)行:cd /opt/android4.3 進(jìn)入到android4.3目錄中 1.3.2 下載源代碼 對(duì)于下載不同版本的android,指定一個(gè)manifest分支(即只指明android對(duì)應(yīng)的版本),使用-b參數(shù)(即下載某個(gè)版本的源代碼),目前關(guān)于Android 4.3的源碼有以下分支:我們可以選擇自己需要下載的: * [new branch] android-4.3_r0.9 -> origin/android-4.3_r0.9 * [new branch] android-4.3_r0.9.1 -> origin/android-4.3_r0.9.1 * [new branch] android-4.3_r1 -> origin/android-4.3_r1 * [new branch] android-4.3_r2 -> origin/android-4.3_r2 * [new branch] android-4.3_r2.1 -> origin/android-4.3_r2.1 我們選擇下載最新的源碼,具體命令: ~/bin/repo init -u https://android./platform/manifest -b android-4.3_r2.1 執(zhí)行此命令會(huì)下載一些文件到我們電腦中,這條命令的主要作用是初始化我們要下載的源碼的的一些配置文件,看到類似下面的提示,表示初始化完成。 repo has been initialized in /opt/android4.3username@user-desktop:/opt/android4.3$ 初始化完成后,會(huì)在/opt/android4.3目錄中生成一個(gè).repo的目錄(此目錄為隱藏屬性的文件,我們可以在終端中使用ls -la命令,或者在文件瀏覽器中選擇“查看”,然后勾選“顯示隱藏文件”,就可以看到此目錄),此目錄保存了將要下載的源代碼的相關(guān)信息,下面我們開始下載源碼 同步獲取源碼 #~/bin/repo sync 如果中間出現(xiàn)中斷,這個(gè)很正常,你可以再次輸入 ~/bin/repo sync 命令來進(jìn)行下載。 可以寫一個(gè)腳本,當(dāng)中斷后,又自動(dòng)開始下載,可以在我網(wǎng)盤中下載此腳本:reposync http://pan.baidu.com/share/link?shareid=3522233410&uk=4278685087 把reposync腳本放在你源碼的目錄,執(zhí)行./reposync命令就可以了。 根據(jù)網(wǎng)速的不同,下載時(shí)間也有快慢,最好在睡覺前或下班后下載代碼,由于源文件比較大,一般國內(nèi)都要5小時(shí)左右甚至更久。 若是出現(xiàn)以下信息,表示代碼以下載完成: Fetching projects: 100% (166/166), done. Syncing work tree: 100% (165/165), done. 源代碼下載完成后,/opt/android4.3文件夾的大小為20G左右,其中.repo有10 G+。 運(yùn)行~/bin/repo sync 還可以重新校對(duì)下載的源碼,若是有問題或遺漏了一些文件會(huì)重新下載,并從.repo目錄中導(dǎo)出到實(shí)際源碼中 注:此步可能會(huì)出現(xiàn)下載錯(cuò)誤,請(qǐng)查看本文最后部分的說明 2、編譯環(huán)境的搭建 首先若是沒有修改源,請(qǐng)修改為國內(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 打開后選擇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)站上說的其它一些軟件或者設(shè)置可以不用理會(huì)。 注:此步可能會(huì)出現(xiàn)錯(cuò)誤,請(qǐng)查看本文最后部分的說明 3、編譯源代碼 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è)線程來編譯 編譯根據(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)查看本文最后部分的說明 4、運(yùn)行模擬器 在終端中執(zhí)行:emulator 運(yùn)行模擬器可能出現(xiàn)的錯(cuò)誤,請(qǐng)查看本文最后部分的說明 5、相關(guān)問題的解決辦法 5.1 下載源代碼可能會(huì)提示的錯(cuò)誤 5.1.1error: Exited sync due to fetch errors... 方法一:不理會(huì)他,重新執(zhí)行repo sync命令。 方法二: 關(guān)于這個(gè)問題其實(shí)google是有說明的http://source./source/downloading.html,為了防止連接數(shù)過多,每個(gè)ip都需要認(rèn)證。。。 第二步:將上面的頁面上以machine開頭的兩行復(fù)制到 ~/.netrc文件中 第三步:repo init -u https://android./a/platform/manifest 多了個(gè)“/a” 然后就可以repo sync了 特別注意.netrc文件是在用戶的根目錄下,root用戶就是/目錄下,如果沒有的話就自己建一個(gè),把權(quán)限改為 *00 5.1.2若是出現(xiàn)這個(gè)錯(cuò)誤:Exited sync due to gc errors 表示代碼基本下載完,需要從repo里面導(dǎo)出來,但是git的版本太低,不支持1.72以下版本。 添加這個(gè)源:deb http://ftp.de./debian sid main。 在終端中執(zhí)行:gedit /etc/apt/source.list 在文件的最后添加deb http://ftp.de./debian sid main,并保存退出 回到終端中執(zhí)行:sudo apt-get update 更新完后,安裝高版本的git工具 在終端中執(zhí)行:sudo apt-get install git-core 5.1.3.repo sync中遇到error:......checkout ....接一串hashnumber 解決方法:進(jìn)到它說提示的目錄中,用git status顯示文件,將修改過的文件刪除掉,再重新repo sync 5.1.4.repo sync中遇到:contains uncommitted changes 解決方法:進(jìn)到它說提示的目錄中,使用git reset --hard命令 5.1.5. 怎么對(duì)repo下的所有project執(zhí)行g(shù)it命令 解決方法:repo forall -c git checkout -b //該條命令會(huì)對(duì)repo下的project執(zhí)行切換branch的命令 5.1.6. 怎么切換到你想要的branch 解決方法:git checkout branchName,比如 git checkout testBranch 5.2安裝編譯環(huán)境的軟件可能會(huì)出現(xià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: 破損的軟件包 某些源有問題,為高版本 ubuntu的源 ,刪除即可,如安裝高版本的git所用的源就是ubuntu 10.4之后的源,用在10.04上就可以會(huì)有問題,引起此提示。 在終端中執(zhí)行:gedit /etc/apt/source.list 把文件的最后 deb http://ftp.de./debian sid main 刪除,并保存退出 回到終端中執(zhí)行:sudo apt-get update 再次重新安裝編譯環(huán)境的軟件 5.3、編譯可能會(huì)遇到的問題: 5.3.1運(yùn)行make命令后,提示以下錯(cuò)誤:/bin/bash: java: command not found 首先檢查是否確實(shí)安裝了jdk,在終端中輸入:java -version ,若是有安裝jdk,就會(huì)顯示jdk的版本信息,提示出錯(cuò),說明沒有安裝jdk,那么就安裝jdk。 安裝jdk后還是提示上面的錯(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 重新編譯若還是提示一樣的錯(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的問題應(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./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)的問題: 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 命令
|
|
|