參考 博文 http://blog.csdn.net/yangblocker/article/details/9673097html
1、環境配置java
電腦: MacBook Pro 2.5GHz Intel Core i5node
內存:4GB 1600 MHz DDR3linux
OS: Snow Leopard 10.8.4android
XCode: 4.6.4 git
JDK:1.6 這個必須是1.6版本。若是是1.7的話要另外安裝1.6版本,並設置爲默認版本,不會的我稍後介紹方法。web
2、設置Mac OS X的編譯環境緩存
基本的參照官網Setting up a Mac OS X build environment。
bash
這裏特別要強調一下Android源代碼必須在大小寫敏感的文件系統下編譯,而Mac OS默認不是大小寫敏感的,所以須要建立eclipse
一個大小寫敏感的磁盤鏡像文件。具體方法有兩種:一種是用命令建立,還有一種就是用系統自帶的磁盤管理工具。
命令方法:用hdiutil create命令,我嘗試過,但失敗了,有誰知道麻煩告訴我下。
磁盤工具:進入應用程序/實用工具/磁盤工具,選擇文件->新建->新建空白映像
點擊建立,ok,建立好了。磁盤鏡像文件保存在當前用戶根目錄下,個人是在/ywen目錄下。咱們須要其將掛載到某個目錄下面,在終端進入建立的磁盤鏡像文件目錄,輸入hdiutil attach ~/android.dmg -mountpoint /Volumes/android。這樣就將其掛載到Volumes目錄下。至此,基本環境完成。
3、下載Android 4.2.2源碼。
參照官網Downloading the Source Tree。
首先咱們要先進入到咱們剛纔掛載的目錄下去。執行 $ cd /Volumes/android。
而後在按照官網步驟一步一步進行。
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
$ mkdir WORKING_DIRECTORY (建立源碼保存的文件目錄)
$ cd WORKING_DIRECTORY/
而後就是下載源碼了,這裏我強烈推薦下使用Android內核剖析(柯元旦著)一書提供的一段防止下載異常的腳本。由於單獨下載可能會出現下載異常而後某個連接下載失敗的狀況。
[plain] view plaincopy
#!/bin/bash
#FileName get-android.sh
PATH=~/bin:$PATH
repo init -u https://android.googlesource.com/platform/manifest -b android-4.2.2_r1
repo sync
while [ $? = 1 ]; do
echo "================sync failed, re-sync again ====="
sleep 3
repo sync
done
複製上面代碼保存到剛纔的源碼目錄(WORKING_DIRECTORY)裏。如:get-android.sh。
最後在終端執行 $ ./get-android.sh開始下載源碼了。接下來就是漫長的等待,我也不清楚要下載多久,我都是晚上把電腦丟在那裏,設置不讓電腦休眠(休眠可能會掉網的),一直下載。當出現下圖所示不少個100%時,那恭喜你,下載完成了。
4、編譯下載的源碼
設置編譯初始化環境
一、$ source build/envsetup.sh
二、選擇編譯目標 $lunch full-eng
開始編譯代碼
$ make
編譯過程很漫長,也是最關鍵的部分,有不少有意思的事情會發生的。
一、若是以前java版本不是1.6的,這個時候就會報錯了,提示java version不正確。關於這個錯誤。能夠查看這裏https://forum.processing.org/topic/how-to-re-enable-java-1-6-on-mac-osx-mountain-lion,看不懂的也能夠問我,你們一塊兒討論。
二、若是出現 If you wish to build using higher version of SDK, build/core/combo/HOST_darwin-x86.mk:66: * try setting BUILD_MAC_SDK_EXPERIMENTAL=1 before build/core/combo/HOST_darwin-x86.mk:67: * rerunning this command 這種錯誤的話。
在終端執行export BUILD_MAC_SDK_EXPERIMENTAL=1就能夠了。繼續執行$make 編譯源碼
三、我記得在編譯了一個多小時吧的時候出現個棘手錯誤,中止編譯了,錯誤以下。
當時有點茫然,google了下,說是webkit的一個bug。可參考這裏https://groups.google.com/forum/#!msg/android-building/MrM4BneUoCw/f0xHBHgsgEsJ。
(我的補充 :)
關於上面的錯誤,就是原做者所說的webKitbug的解決辦法 參考https://bug-92264-attachments.webkit.org/attachment.cgi?id=154381 ; 上面就是說要修改XPathParser.cpp 文件,修改 46,47 添加代碼
using namespace WebCore;
using namespace XPath;
以下:
using namespace WTF; using namespace Unicode; //namespace WebCore { //namespace XPath { using namespace WebCore; using namespace XPath;
修改 627 行 方法的代碼 (註釋的是源代碼) 修改以下:
void Parser::deleteNodeTest(Step::NodeTest* t) { // if (t == 0) // return; // ASSERT(m_nodeTests.contains(t)); m_nodeTests.remove(t); delete t; } //}} 記得註釋2個右括號
繼續$make 最後編譯成功後會出現
nstalled 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
編譯後運行模擬器::
首先 source build/envsetup.sh (假如你這行命令你以前設置好了就不用了,)
輸入 $ lunch 命令
跟住會提示你選擇版本,咱們選擇 第一個版本1, 輸入1
命令運行完 輸入命令 emulator
第二部分:搭建Eclipse源碼工程
1. 進入源碼目錄下的development/ide/eclipse,把android-formatting.xml ,android.importorder , .classpath拷貝到源碼目錄
2. chmod +x .classpath 賦予執行權限
3. 在eclipse工程菜單 window-->preferences-->java-->Code Style-->Formatter 導入android- formatting.xml文件,organize imports導入android.importorder文件
4. 新建一個java工程,導入android源碼 (參考下面導入android源碼)
5. 修改eclipse配置,位於android.importorder目錄下的eclipse.ini文件,修改-Xms,-Xmx爲128和512
-Xms128m
-Xmx512m
第三部分:調試android源碼
1. 退出Eclipse工程
2. 在android源碼目錄執行 . build/envsetup.sh ,初始化環境變量
3. 啓動模擬器 emulator &
4. 等模擬器啓動成功後,啓動ddms ddms &5. 在ddms上選擇你須要調試的進程,通常若是是調試系統自帶的應用,好比聯繫人,選中下面進程
6. 打開Eclipse工程,設置調試端口
選擇你的工程,右鍵打開菜單選擇 Debug AS—Debug configuration 彈出窗口,選擇Remote JAVA Application,右鍵在菜單選擇NEW,彈出下面的視圖,修改Port爲8700
轉自: http://blog.chinaunix.net/uid-26215986-id-3969849.html
-Xms128m
-Xmx512m
-XX:MaxPermSize=256m