Mac 下載 編譯 debug Android 源碼

Android 源碼系列文章:

Mac 10.12 快速下載 Android 源碼

Mac 10.12 編譯 Android 源碼

使用 IntelliJ 查看 Android 源碼

使用 IntelliJ Debug Android 源碼

下載源碼

下載源碼有兩個渠道

1.google 官方渠道 https://source.android.com/source/downloading.html
2.清華的 AOSP 鏡像 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/

使用 google 的渠道需要科學(xué)上網(wǎng), 如果科學(xué)上網(wǎng)網(wǎng)速穩(wěn)定且不錯的話還是建議使用上面那個.
我下面介紹的下載源碼的方法不會向往常一下動輒 30G - 50G 的源碼
我使用的 google 官方渠道, 一晚上就把源碼下載完了

下面關(guān)于科學(xué)上網(wǎng)的問題不在討論, 本博客使用的是 google 官方渠道

在下載源碼之前還需要做一些準(zhǔn)備

repo工具下載及安裝

在 termianl 中執(zhí)行如下命令

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

簡單來聊聊 repo 這個工具repo. 我的理解 repo 其實(shí)就是一個 python 腳本.
Android 系統(tǒng)源碼肯定是由很多個子項(xiàng)目來構(gòu)成, 每個子項(xiàng)目都有一個自己的 git 倉庫
那么每次Android 開發(fā)新的版本的時候, 需要開一個新的分支, 所以這些子項(xiàng)目也需要跟著去開這些分支.
如果一個一個手動去弄可能很麻煩. 所有 repo 就誕生了,

repo 就是一個腳本文件, 通過調(diào)用一些列的 git 命令, 使得開發(fā)者更好的管理那些子項(xiàng)目

建立源碼文件

mac 端和 linux 上不同, 一般的 mac 上的分區(qū)都是不區(qū)分大小寫的.
但是 Android 源碼需要在區(qū)分大小寫的磁盤上編譯, 所以我們得分出一個獨(dú)立的磁盤鏡像來存放 android 源碼

使用 Mac 自帶的[磁盤工具] 來創(chuàng)建一個新的磁盤鏡像, 如下圖


注意上圖中紅框框住的部分很重要
創(chuàng)建完之后, 直接到存儲木中直接雙擊, 即可掛載該鏡像.
掛載后,會在 Finder 的做出多一個鏡像設(shè)備


或者可以使用一下命令掛載鏡像

hdiutil attach /Users/chenzhiyong/AndroidSourceCode.sparseimage -mountpoint  /Volumes/AndroidSourceCode;

接下來我們跳轉(zhuǎn)到我們的鏡像目錄中創(chuàng)建一個文件夾(名字自定義),這次我下載的源碼是 android-6.0.1_r77, 所以文件夾名字也是如此.

開始下載源碼

使用 termianl 跳轉(zhuǎn)到我們剛剛創(chuàng)建的文件夾下面
執(zhí)行如下命令:

repo init -u https://android.googlesource.com/platform/manifest -b android-6.0.1_r77

關(guān)于 -b 后面分支名稱請查閱官方文檔 https://source.android.com/source/build-numbers.html#source-code-tags-and-builds

命令執(zhí)行完成后, 會在當(dāng)前目錄下生成一個 .repo 的文件夾,


上圖中我還框住了 mainfest.xml 文件, 這個文件很重要, 可以打開看看, 里面配置了400 多個 project, 這些 project 的代碼就是我即將要下載的.

仔細(xì)觀察會發(fā)現(xiàn) .repo 目錄下的 manifest.xml 文件其實(shí)是一個快捷方式, 真正的文件在mainfest文件夾中, 如下圖


為了能夠更加快捷的下載源碼, 接下來我們需要修改 default.xml 中的內(nèi)容了.

如果仔細(xì)看過該文件的內(nèi)容的話, 會發(fā)現(xiàn)其實(shí)有部分 project 標(biāo)簽下是有配置 clone-depth="1"
這個配置的意思是, 在 git clone 源碼的時候只 clone 最新的這一層, 不 clone 歷史的文件記錄這些, 加上這個配置就能很快的 clone 源碼了.

所以意接下來我們就是需要為每個 project 標(biāo)簽都加上 clone-depth="1"的配置.
當(dāng)然不可能手動來加了, 不然會很累的, 為此我寫了個簡單的 python 腳本代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

file_object = open('default.xml')

change_content = ''
while 1:
    line = file_object.readline()
    if not line.__contains__('clone-depth'):
        try:
            endpos = line.index("/>")
            line = line[0:endpos] + ' clone-depth="1"' + line[endpos: line.__len__()]
            pass
        except Exception, e:
            pass

    change_content += line
    if not line:
        break
    pass  # do something

print change_content

我們不需要再 源碼目錄下修改這些文件, 在其他地方創(chuàng)建一個 default.xml 文件, 把 .Repo中的 default.xml 中的 含有 project 標(biāo)簽的內(nèi)容復(fù)制到 剛剛創(chuàng)建的文件中


接下來執(zhí)行 python 腳本就就可以在命令行下面看到修改好的 project 標(biāo)簽, 我們把這些標(biāo)簽替換掉.Repo中的 default.xml project 標(biāo)簽即可

修改完default.xml文件后, 就可以開通下載源碼了, 為了斷線后或者出現(xiàn)異常情況后依然能夠下載源碼, 在網(wǎng)上找到了如下腳本:

#!/bin/bash 
#FileName  syn.sh

repo sync 
while [ $? = 1 ]; do 
echo "================sync failed, re-sync again =====" 
sleep 3 
repo sync 
done

我們把該腳本文件放到剛剛創(chuàng)建的源碼目錄下面(android-6.0.1_r77), 執(zhí)行該腳本即可開始下載源碼了
不出意外的話,一晚上基本能夠同步完

這樣同步完的代碼是不能切換到 Android 其他分支的. 只能使用當(dāng)前我們下下來的分支, 這也是這樣下載的缺點(diǎn). 不過還是看自己, 如果需要頻繁切換 android 分支, 還是不要修改 default.xml 文件中的內(nèi)容了

現(xiàn)在完 android 源碼后, 請看下一篇編譯 Android 源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末陈惰,一起剝皮案震驚了整個濱河市逞敷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌鸭丛,老刑警劉巖后频,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梳庆,死亡現(xiàn)場離奇詭異暖途,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)膏执,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進(jìn)店門驻售,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人更米,你說我怎么就攤上這事欺栗。” “怎么了征峦?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵迟几,是天一觀的道長。 經(jīng)常有香客問我栏笆,道長类腮,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任蛉加,我火速辦了婚禮蚜枢,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘七婴。我一直安慰自己祟偷,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布打厘。 她就那樣靜靜地躺著修肠,像睡著了一般。 火紅的嫁衣襯著肌膚如雪户盯。 梳的紋絲不亂的頭發(fā)上嵌施,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機(jī)與錄音莽鸭,去河邊找鬼吗伤。 笑死,一個胖子當(dāng)著我的面吹牛硫眨,可吹牛的內(nèi)容都是我干的足淆。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼礁阁,長吁一口氣:“原來是場噩夢啊……” “哼巧号!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起姥闭,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤丹鸿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后棚品,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體靠欢,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡廊敌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了门怪。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片骡澈。...
    茶點(diǎn)故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖薪缆,靈堂內(nèi)的尸體忽然破棺而出秧廉,到底是詐尸還是另有隱情伞广,我是刑警寧澤拣帽,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站嚼锄,受9級特大地震影響减拭,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜区丑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一拧粪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沧侥,春花似錦可霎、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至旺罢,卻和暖如春旷余,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扁达。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工正卧, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人跪解。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓炉旷,卻偏偏與公主長得像,于是被迫代替她去往敵國和親叉讥。 傳聞我的和親對象是個殘疾皇子窘行,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,519評論 25 707
  • (時間:2017年/2月/20日 狀態(tài):依然是菜鳥)首先抽高,謝謝這些大爺?shù)牟┛蛶椭疫@個菜鳥,貼出鏈接透绩。使用Andr...
    老沈Rosen閱讀 25,601評論 24 82
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理翘骂,服務(wù)發(fā)現(xiàn)壁熄,斷路器,智...
    卡卡羅2017閱讀 134,600評論 18 139
  • 早上醒來碳竟,不知道是早上還是晚上草丧,結(jié)果又睡了,晚起了半個小時莹桅。 昨天晚上寢室討論了考研的事情昌执,我去了自習(xí)室,去對了诈泼。...
    9949969a81e2閱讀 251評論 0 0
  • Easycare易可兒 一個堅持【初心】+【匠心】執(zhí)著于為女性提供真正健康的經(jīng)期私護(hù)用品品牌懂拾。 人們總說生命中出現(xiàn)...
    墨言飄雪閱讀 427評論 0 6