因爲在工做中遇到了不少關於android內部實現的問題,雖而後面都解決了,有些是看了源碼實現,有些源碼看不了只能去google,百度。這就致使了對於不少的問題實際上是知其然不知其因此然,因此從如今開始我下定決心開始學習Android的源碼。那說到源碼就必須提到編譯源碼這件事情。
最開始是在個人MBP上面安裝了linux的雙系統準備在ubuntu上面來安裝編譯源碼,不過這個方法有個弊端就是查看源碼的過程真是爽翻天啊,因此開始搗鼓再mac上面編譯源碼php
那麼如今開始了:html
Mac OS (Intel/x86)java
Android 6.0 (Marshmallow) - AOSP master:Mac OS v10.10 (Yosemite) 或更高版本,具備 Xcode 4.5.2 和命令行工具python
Android 5.x (Lollipop):Mac OS v10.8 (Mountain Lion),具備 Xcode 4.5.2 和命令行工具linux
Android 4.1.x-4.3.x (Jelly Bean) - Android 4.4.x (KitKat):Mac OS v10.6 (Snow Leopard) 或 Mac OS X v10.7 (Lion),以及 Xcode 4.2(Apple 的開發者工具)android
Android 1.5 (Cupcake) - Android 4.0.x (Ice Cream Sandwich):Mac OS v10.5 (Leopard) 或 Mac OS X v10.6 (Snow Leopard),以及 Mac OS X v10.5 SDKgit
這裏會須要註冊一個 甲骨文的帳號github
gmake 後面會下載的,你只須要安裝好python2.7 然而通常python是安裝好的shell
您可使用磁盤映像在現有的 Mac OS 環境中建立區分大小寫的文件系統。要建立磁盤映像,請啓動磁盤工具,而後選擇「新建映像」。完成編譯至少須要 25GB 空間;更大的空間可以更好地知足將來的需求。使用稀疏映像有助於節省空間,並且之後能夠隨着需求的增長進行擴展。請務必選擇「Case sensitive, Journaled」存儲卷格式。macos
我推薦使用這種方式來創建磁盤映像
您也能夠經過 shell 使用如下命令建立磁盤映像:
# hdiutil create -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/android.dmg
這將建立一個 .dmg(也多是 .dmg.sparseimage)文件,該文件在裝載後可用做具備 Android 開發所需格式的存儲卷。
若是您之後須要更大的存儲卷,還可使用如下命令來調整稀疏映像的大小:
# hdiutil resize -size <new-size-you-want>g ~/android.dmg.sparseimage
對於存儲在主目錄下的名爲 android.dmg 的磁盤映像,您能夠向 ~/.bash_profile 中添加輔助函數:
要在執行 mountAndroid 時裝載磁盤映像,請運行如下命令:
# mount the android file image
function mountAndroid { hdiutil attach ~/android.dmg -mountpoint /Volumes/android; }
注意:若是系統建立的是 .dmg.sparseimage 文件,請將 ~/android.dmg 替換成 ~/android.dmg.sparseimage。
要在執行 umountAndroid 時卸載磁盤映像,請運行如下命令:
# unmount the android file image
function umountAndroid() { hdiutil detach /Volumes/android; }
裝載 android 存儲卷後,您將在其中開展全部工做。您能夠像對待外接式存儲盤同樣將其彈出(卸載)。
你只須要在AppStore 裏面安裝Xcode就能夠了。
以後須要運行一下命令
$ xcode-select --install
或者你也能夠選擇直接運行命令,不過我不推薦,下個xcode有好處的哦
下載連接 根據本身的系統來選擇
vi ~/.bash_profile
vi的小提示,按i切換到insert模式就是編輯模式,按esc退出編輯模式,按:wq 保存退出
複製 export PATH=/opt/local/bin:$PATH
到文件中。
輸入source ~/.bash_profile
使命令生效
POSIXLY_CORRECT=1 sudo port install gmake libsdl git gnupg
若是您使用 Mac OS X v10.4,還須要安裝 bison:
POSIXLY_CORRECT=1 sudo port install bison
在 Mac OS 中,可同時打開的文件描述符的默認數量上限過低,在高度並行的編譯流程中,可能會超出此上限。要提升此上限,請將下列行添加到 ~/.bash_profile 中:
ulimit -S -n 1024
export USE_CCACHE=1
export CCACHE_DIR=/<path_of_your_choice>/.ccache
mkdir ~/bin
PATH=~/bin:$PATH
(要在~/.bash_profile中添加;輸入source ~/.bash_profile
使命令生效)
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
必須使用以前建立的區分大小寫的文件系統,通常掛載的新的盤是在/Volumes/ 路徑下的
我分出來的區分大小寫的文件系統名字是Android 因此我cd進去就ok了
mkdir XXX
(XXX 是你本身取得名字)cd XXX
若是遇到repo: command not found 問題 請在初始工做目錄輸入
echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
export PATH=$PATH:$HOME/bin
git config --global user.name "Your Name"
git config --global user.email "you@example.com"
repo init -u https://android.googlesource.com/platform/manifest
清華鏡像 首先咱們能夠看到
2016-06-24 : 關閉 git:// 協議,僅支持 HTTPS
因此咱們是沒法使用repo來同步代碼的,因此咱們要這麼作:
tar xf aosp-latest.tar
解壓的目錄
cd aosp
repo sync
此後,每次只需運行 repo sync 便可保持同步。 咱們強烈建議您保持天天同步,並儘可能選擇凌晨等低峯時間
科大鏡像沒有去掉git協議,因此咱們能夠順暢的完成下載按照頁面提示的操做便可
對於運行帶標記的 AOSP 版本分支的受支持設備,您能夠從 Google 的 Nexus 驅動程序頁面下載相關的官方二進制文件。有了這些二進制文件,您將有權使用採用非開放源代碼的其餘硬件功能。要編譯 AOSP 的 master 分支,請使用 Nexus 設備的二進制文件預覽。在針對某種設備編譯 master 分支時,請使用適用於最新編號版本的二進制文件或具備最新日期的二進制文件。
sh xxx.sh
運行此處須要agree用戶協議,你只須要按住向下鍵,就能夠劃到最後輸入 I ACCEPT 就能夠了。
sh運行完成以後會獲得一個vendor文件夾,將其複製到源代碼的根目錄下
清理
爲了確保新安裝的二進制文件在解壓後會被適當考慮在內,請使用如下命令刪除全部之前編譯操做的已有輸出:make clobber
source build/envsetup.sh
lunch
而後會出現對應的列表選擇其中某個數字便可
該命令表示針對模擬器進行完整編譯,而且全部調試功能均處於啓用狀態。
若是您沒有提供任何參數就運行命令,lunch 將提示您從菜單中選擇一個目標。
全部編譯目標都採用 BUILD-BUILDTYPE 形式,其中 BUILD 是表示特定功能組合的代號。
BUILDTYPE 是如下類型之一
編譯類型 | 使用狀況 |
---|---|
user | 權限受限;適用於生產環境 |
userdebug | 與「user」相似,但具備 root 權限和可調試性;是進行調試時的首選編譯類型 |
eng | 具備額外調試工具的開發配置 |
aosp_bullhead-userdebug
若是想要針對真機調試,請參閱運行版本進行命令選擇。我在這裏不建議初次接觸源碼編譯的人進行真機調試,刷磚了就gg了。
您可使用 make 編譯任何代碼。GNU Make 能夠藉助 -jN 參數處理並行任務,一般使用的任務數 N 介於編譯時所用計算機上硬件線程數的 1-2 倍之間。例如,在一臺雙核 E5520 計算機(2 個 CPU,每一個 CPU 4 個內核,每一個內核 2 個線程)上,要實現最快的編譯速度,可使用介於 make -j16 到 make -j32 之間的命令。
make -j4
sudo xcode-select -s /Applications/Xcode.app/Contents/Developer
https://github.com/boxen/our-boxen 根據此處進行更新
經過查看build/core/combo/mac_version.mk文件咱們能夠看到
mac_sdk_versions_supported := 10.8 10.9 10.10 10.11
而我電腦是10.12版本的因此我加了個10.12在這句話以後 就能夠了
咱們須要下載一個MacOSX10.11.sdk放到這個目錄中。 ReleasePage由於10.12這個版本的sdk中syscall這個方法被棄用了,因此咱們須要換回11這個版本的sdk
- could not find jdk tools.jar at /System/Library/Frameworks/JavaVM.framework/Versions/Current/Commands/../lib/tools.jar, please check if your JDK was installed correctly. Stop.
在~/.bash_profile 中添加export ANDROID_JAVA_HOME=$JAVA_HOME
咱們須要下載一個MacOSX10.11.sdk解壓後放到這個目錄中Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
應該是jdk版本不對 你須要查看你在安裝過程當中哪裏使用了1.7版本的jdk 能夠經過查看
java -version
和javac -version
來查看
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
修改文件 prebuilts/sdk/tools/jack-admin 修改這個語句加上
-Xmx4096m
---->JACK_SERVER_COMMAND="java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=$TMPDIR $JACK_SERVER_VM_ARGUMENTS -Xmx4096m -cp $LAUNCHER_JAR $LAUNCHER_NAME"
https://blog.csdn.net/xljxiang/article/details/83044067
unset NDK_ROOT
終於build完成了 真是歷經千幸萬苦啊。
首先第一步 在源代碼的更目錄下輸入
sudo adb reboot bootloader
(若是發現沒有成功請從新輸入6.1和6.2的步驟)
而後你就會到達這個界面
fastboot oem unlock
輸入這個命令 而後經過音量鍵選擇yes 經過待機鍵確認
再而後輸入
fastboot flashall -w
export ANDROID_PRODUCT_OUT=/Volumes/android/android-7.1.1_r24/out/target/product/generic
(請替換你本身的目錄)
你會發現沒有boot.img 這個文件 這時候你只須要
make bootimage
就會生成對應的文件