1. 程式人生 > >Android原始碼:2、閱讀詳解

Android原始碼:2、閱讀詳解

文章目錄

一、原始碼下載

二、閱讀原始碼

1、Android系統架構圖分析

2、閱讀哪些原始碼

3、Android原始碼閱讀工具


一、原始碼下載

有些人可能還不知道如何下載Android原始碼開源專案AOSP(Android Open Source Project)。Android原始碼可以全部下載,也可以單個下載。我用的全部下載,詳情可參考上篇文章Android原始碼:1、下載詳解(支援行動硬碟、mac)—親測成功

1、全部下載

(1)檢視官網只要按照上面一步步做就可以了,但是由於需要翻牆,國內無法直接訪問,而整個Android專案原始碼巨大,即便是翻牆後下載也很慢,所以還是使用國內映象比較好。

(2)網上推薦比較多的是:中科大的映象 或者 清華大學的映象 ,你一定要備一個比較大的磁碟至少60個G吧,還不算後期編譯的,我預存了220G。詳細可參考我上篇文章:Android原始碼:1、下載詳解(支援行動硬碟、mac)—親測成功  我們分析原始碼其實是不需要全部程式碼的,因為AOSP不僅包括系統原始碼,還有些工具程式碼,如aapt,adb等,這些我們根本不需要,而且即便是系統原始碼,也不是所有我們都需要看,如果真的全部看,你這輩子都看不完,所以你也可以單個下載閱讀。

2、單個下載

官方地址,比如我們要下載platform/frameworks/base/目錄下的程式碼,我們可以git clone 

https://android.googlesource.com/platform/frameworks/base,不過這個還是會遇到翻牆的問題,當然我們也可以用映象。

映象地址,比如我們要下載platform/frameworks/base/目錄,就用git clone https://aosp.tuna.tsinghua.edu.cn/platform/frameworks/base,如果你頻寬夠的話,一般幾分鐘就可以下載好你想要的單個原始碼了。如果你想下載單個檔案,或者搜尋檔名及程式碼,可以訪問 http://androidxref.com/,這裡有部分Android的原始碼

 

二、閱讀原始碼

有些人雖然下載下來了,但是面對龐大的Android原始碼專案又望而卻步,不知道從哪兒下手原始碼,那麼下載Android原始碼僅僅是我們閱讀分析原始碼的開始。。。

1、Android系統架構圖分析

首先,我們來看一下我們剛開始學習Android就需要了解的一張圖,Android系統架構圖

我們都知道Android系統從上到下大致分為這四層,所以我們以這四層為基礎,講解下AOSP的目錄結構:

第一層:應用程式層(applications)對應根目錄下 platform/packages/apps

【git clone https://aosp.tuna.tsinghua.edu.cn/platform/packages/apps

第二層:應用程式框架層(application framework)對應根目錄下的 platform/frameworks

 

第三層:執行庫層包括執行庫(libraries)和android執行時環境(android runtime)

libraries對應目錄很多,其中libc庫對應的是 platform/bionic

android執行時環境,Core Libraries 對應根目錄下的 platform/libcore

Dalvik Virtual Machine 對應根目錄下的 platform/dalvik,不過現在已經是ART了,所以目錄是 platform/art

 

第四層:Linux核心層對應根目錄下的 kernel,每一個目錄對應了一個kernel的版本,因為Android要相容各種晶片,

下面羅列一下:

goldfish 專案包含適用於所模擬的平臺的核心原始碼。

msm 專案包含適用於 ADP1、ADP2、Nexus One、Nexus 4、Nexus 5、Nexus 6、Nexus 5X、Nexus 6P、Nexus 7 (2013)、Pixel 和 Pixel XL 的原始碼,可用作使用 Qualcomm MSM 晶片組的起點。

omap 專案用於 PandaBoard 和 Galaxy Nexus,可用作使用 TI OMAP 晶片組的起點。

samsung 專案用於 Nexus S,可用作使用 Samsung Hummingbird 晶片組的起點。

tegra 專案用於 Xoom、Nexus 7 (2012)、Nexus 9,可用作使用 NVIDIA Tegra 晶片組的起點。

exynos 專案包含適用於 Nexus 10 的核心原始碼,可用作使用 Samsung Exynos 晶片組的起點。

x86_64 專案包含適用於 Nexus Player 的核心原始碼,可用作使用 Intel x86_64 晶片組的起點。

hikey-linaro 專案用於 HiKey 參考板,可用作使用 HiSilicon 620 晶片組的起點。

第三層和第四層中間還有個硬體抽象層(HAL)對應根目錄下的 platform/hardware

2、閱讀哪些原始碼

因為不同的人從事著不同的工作,有的人從事應用開發,可能對Java層東西感興趣;有的人從事Framework開發,可能對Framework層感興趣;有的從事硬體開發,可能對底層實現感興趣。

對於我而言,我是從事應用層開發的,我主要會了解以下幾個方面的原始碼:

  • Android系統啟動流程,應用啟動流程,四大元件啟動流程,這將列入系統啟動篇
  • 系統常用服務ActivityManagerService,WindowManagerService等,這將列入系統服務篇
  • 通訊機制,主要是Binder和Handler,這將列入通訊篇
  • 程序和執行緒的建立,執行,銷燬,這將列入程序篇
  • View的繪製和顯示流程,事件分發機制,這將列入圖形繪製篇
  • Android虛擬機器ART執行機制,類載入機制,Java註解,Java反射,這將列入虛擬機器篇
  • Android對於Java集合的優化演算法,這將列入Java基礎篇

不能盲目地毫無目的地看原始碼,因為這樣的話最終你會淹沒在AOSP的大海里,看了一年半截啥都看了,卻又感覺都沒看透,別人問你原始碼的東西,都能說個一二,但是一往深了說,就不知所以了。

所以對於AOSP原始碼,不在於多,而在於精,你不要試圖把所有的原始碼都看懂,你只要對自己感興趣的那部分深入研究就可以,因為即便是Google工程師也不可能把AOSP全部讀完。

3、Android原始碼閱讀工具

(1)Source Insight

Android 原始碼閱讀神器當然是Source Insight(windows)

Source Insight的好處:

  • 支援方法跳轉,類跳轉,並且對C++支援很好
  • 支援檔案搜尋,java,c++,xml都支援,並且支援內容搜尋
  • 支援一鍵匯入,隨時配置路徑
  • 而且最重要的,匯入檔案數多的時候不卡

(2)Understand

在此推薦一款Mac下的SourceInsight替代品, 程式碼分析閱讀工具Understand

雖然說介面很不Mac, 看起來比較low, 但是功能還是很強大的, 而且用來看原始碼剛剛好

可參考:https://www.jianshu.com/p/06f25d9131de

下載連結:http://mac.orsoon.com/Mac/150631.html【收費】