下載編譯android源碼筆記
這幾天下載編譯了android源碼,下面是一些筆記。
準備工作
1.安裝JDK和Xcode, 一般android開發人員的mac電腦上這兩樣應該是必備的吧。我的JDK是1.7版本,沒試過1.8是否可行。 安裝Xcode是因為需要里面Command Line Tools的。從Yosemite開始,Command Line Tools可以單獨安裝,無需像之前一樣 必須先安裝Xcode才能安裝Command Line Tools。但是直接裝Xcode是最方便的,避免后續打的其他問題。
2.準備50G的硬盤空間,由于我的mac空間不足50G,我也不想浪費大量的空間,所以我直接下載到移動硬盤上,用mac的磁盤工具對 移動硬盤分區,選擇格式的時候選擇mac OS擴展(區分大小寫)。

下載源碼
1.安裝repo
Repo是一個輔助于Git管理Android版本及分支的工具.在安裝repo前,需要新建一個文件夾~/bin,并把這個文件夾放到PATH環境變量里, 然后我們就可以把repo下載到這個文件夾里. 依次輸入下面的命令,這里需要使用V*N.
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
repo這個工具很小(24KB),但卻是下載整個源碼不可缺少的工具.
2.修改repo
在國內一定要使用國內的鏡像下載,不然連了V*N只有不到100KB/S的下載速度,要下載20g要很久。 下面修改repo文件,把REPO_URL = 'https://gerrit.googlesource.com/git-repo'改成 REPO_URL = 'https://gerrit-googlesource.lug.ustc.edu.cn/git-repo'
3.下載
按照修改完成后,建立一個放置android源碼的目錄。
$ mkdir androidM $ cd androidM $ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.1_r17 $ repo sync
這時就開始下載源碼了,需要的時間比較長。一共20多G,需要多久可以根據自己的下載速度計算,下載完后會自動check out出android項目文件,一共加起來 的空間有40g左右。
如果要暫停下載可以按Control+C或者Control+C,然后輸入repo sync繼續下載。
編譯源碼
編譯源碼編譯生成idegen.jar
進入Android 源碼根目錄,執行
$ . build/envsetup.sh $ mmm development/tools/idegen/
這行命令的意思是編譯idegen這個項目,生成idegen.jar文件.生成成功后,會顯示這個jar包的位置,并顯示make completed successfully (43 seconds)。
下面簡單說一下m命令:
m、mm、mmm命令可以讓你只編譯單獨模塊,而不用費大量的時間比編譯整個Android系統。要使用m、mm、mmm命令,需要在源碼目錄下執行如下命令。 否則會提示命令找不到。
這3個命令的區別在于:
1.單獨編譯某模塊,需要在mmm后面指定模塊路徑。 2.可以跳轉到你想編譯模塊相對應目錄下執行“mm”命令。 3.用 m 編譯全部的模塊。
所以上面的mmm development/tools/idegen/也可以寫成下面的樣子
$ cd development/tools/idegen $ mm
為什么要先編譯這個idegen文件夾呢?要將Android系統源代碼工程導入到Eclipse或者IntelliJ IDEA,關鍵是要有相應的工程配置文件。idegen就是用來生成針對Eclipse和IntelliJ IDEA的Android系統源代碼工程配置文件的一個工具。
如果遇到Can not find SDK 10.6 at /Developer/SDKs/MacOSX10.6.sdk的錯誤,具體錯誤的原因是,在編譯腳本中會檢查當前的Xcode sdk 的版本是否是兼容的,這可能是因為你mac上的xcode版本比較新,在Android源代碼中還沒有添加上.理論上說應該用Android代碼對應的Xcode SDK 版本來編譯,不然可能會有兼容性的問題。但是我自己實測最新的xcode版本是可以正常編譯Android源代碼的,具體的方法如下所示: 你可以到Xcode的sdk路徑下(/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs)查看當前 系統的SDK版本是多少。比如我的SDK版本是MacOSX10.11.sdk,接下來編輯build/core/combo/mac_version.mk中的mac_sdk_versions_supported 所在的行添加10.11就行了。
我在執行這步過程中出現了另外一個錯誤:
make: *** No rule to make target </span><span class="n">out</span><span class="o">/</span><span class="n">host</span><span class="o">/</span><span class="n">common</span><span class="o">/</span><span class="n">obj</span><span class="o">/</span><span class="n">JAVA_LIBRARIES</span><span class="o">/</span><span class="n">guavalib_intermediates</span><span class="o">/</span><span class="n">javalib</span><span class="p">.</span><span class="n">jar</span><span class="err">'</span><span class="p">,</span> <span class="n">needed</span> <span class="n">by</span> <span class="err">out/host/common/obj/JAVA_LIBRARIES/idegen_intermediates/javalib.jar'. Stop. \e[0;31m#### make failed to build some targets (5 seconds) ####\e[00m
這個問題糾結了很久,google也沒有找到答案,我猜想可能是jdk版本的原因,最終還是無法生成idegen.jar,只能找別的辦法,如果只是為了閱讀源碼,而不需要自己刷系統的話,也可以 不編譯,直接拷貝一個過來,可以參考 如何使用Android Studio開發/調試Android源碼 在這片文章末尾有idegen.jar的下載地址,然后粘貼到out/host/darwin-x86/目錄下。
生成IDE配置文件
在AOSP源碼根目錄執行下面的命令:
development/tools/idegen/idegen.sh
運行無錯誤的話,會在AOSP源代碼根目錄生成下列文件
// 用于IntelliJ IDEA的項目配置文件 android.ipr android.iml
// 用于Eclipse的項目配置文件 .classpath
然后在android studio中打開新的項目,選擇源碼根目錄就可以了。