當前位置:首頁 » 操作系統 » android源碼情景分析

android源碼情景分析

發布時間: 2022-05-02 19:16:23

1. 怎樣評價羅升陽的android系統源代碼分析

我幹了3年Android sdk開發,覺得到了瓶勁沒法更進一步,於是花了一年多點時間,大概摸到點門徑。根據前輩的經驗,Android底層完全入門需要兩年。 先說下我的入門過程: 第零步,下載源碼,我下的4.2的,框架層源碼10G,內核2G多,ctags給框架層建的標簽文件都有600M,當時讓我有點震撼,用的vim+ctags+cscope來閱讀,還算不錯,架構挺清晰的。 第一步,我找到了一本好書《Android的設計與實現 第一卷》它講了Android框架層的啟動,初始化,服務框架初始化,Binder,消息循環,PackageManagerService,ActivityManagerService。據作者說後面會出講UI子系統的第二卷,拭目以待。其實這本書看了幾十頁我就發現需要第二步的知識,否則看不下去,於是跳去第二步。 第二步,學習linux系統編程,在看《Android的設計與實現》的時候我發現,框架層的Native部分,全是Linux編程。為了掌握這部分知識,我花了4個月學習了《Linux系統編程手冊》(TLPI)這本1000多頁的書,我以前是搞WIndows文件系統這塊的,所以C語言還比較熟,TLPI的習題很有意思,量也比較大,堅持下來還是收獲很多。 第三步,花了4個月學習了一些Linux內核的知識,看了LKD,PLKA看了一半多。越學越沒底,覺得不懂得越來越多,不過這個也正常,只有靠慢慢磨,估計以後要不斷的磨這塊。 第四步,回頭看Android源碼,這次一口氣看完了《Android的設計與實現 第一卷》,終於對框架層有了譜。同時真的數次把我看暈,前面看Linux內核源碼都沒這么暈,不斷在Java層和Native層之間跳有點磨腦漿。其中我又覺得Java的基礎沒有打太牢,回去補了一個月的《Core Java》第八版。但是這書沒有涉及UI子系統,於是又看了《Android內核剖析》 第五步,《Android內核剖析》(這本書實際上是講框架層的,作者也是個搞嵌入式的,所以他在寫框架層的時候文筆不太好,很羅嗦,不過還是有很多看點,到他後來寫做ROM,玩開發板時估計是說到了他的本行,一下子遛起來了看得出還是挺有水平的,這本書知識有點舊畢竟講的是2.3很多代碼已經過時,但是作者很多點子很有參考價值)這本書講UI子系統和按鍵/觸摸消息處理系統還是很有分量的,尤其13章View繪制那裡,結合源碼研究很有收獲。而後面他講編譯框架和ROM相關的東西都是挺寶貴的資料。 第六步,為了再補一下其他諸如電源管理模塊等子系統的知識看了,《深入理解android》系列,個人認為這個系列看起來有點不太舒服,不過作為補充印證還是比較有價值。 第七步,《Android系統源代碼情景分析》,羅升陽的源碼分析大作,比《Android的設計與實現》分析得更細致,但缺點是涉及到模塊比較少,選用的源碼也比《Android的設計與實現》更舊一點。看完書後需要去研究作者的博客,東西挺多的,一定讓你滿意。 第八步,買塊開發板自己玩。這步我還沒走到,原因是我覺得我還差點准備知識。可能要再幾個月,到時准備入塊6410或者樹莓派。 最後,由於我11年以前都是搞Windows這塊的,所以對Linux知識不是很了解,不得已看了這么些書,如果是一直做Linux的人,很多步驟估計可以省掉了。直接上源碼才是正道。 我本身做著移動GIS開發的工作,學框架層全是因為興趣,但招聘平台Android框架層開發人員還是蠻有競爭力的有不少定製ROM,智能電視的工作都處於人才難求狀態,畢竟有一定的門檻,現在各種ios培訓,讓奔著錢干開發的人紛紛湧入,而ios只能幹sdk開發的缺點就暴露出來了,一堆新手老手,菜鳥大牛全擠在SDK開發這塊,我覺得不太妙。 反觀Android這邊,雖然入門菜鳥沒有搞ios來錢,但是可持續性很好,從sdk-》框架》驅動》內核這樣幹下去。干著干著發現自己漸漸變成了Linux開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。 轉載

2. 深入理解ANDROID怎麼樣

《深入理解Android》是一本以情景方式對Android的源代碼進行深入分析的書。內容廣泛,以對Framework層的分析為主,兼顧Native層和Application層;分析深入,每一部分源代碼的分析都力求透徹;針對性強,注重實際應用開發需求,書中所涵蓋的知識點都是Android應用開發者和系統開發者需要重點掌握的。
全書共10章:
第1章介紹了閱讀本書所需要做的准備工作,主要包括對Android系統架構和源碼閱讀方法的介紹;
第2章通過對Android系統中的MediaScanner進行分析,詳細講解了Android中十分重要的JNI技術;
第3章分析了init進程,揭示了通過解析init.rc來啟動Zygote以及屬性服務的工作原理;
第4章分析了Zygote、SystemServer等進程的工作機制,同時還討論了Android的啟動速度、虛擬機HeapSize的大小調整、Watchdog工作原理等問題;
第5章講解了Android系統中常用的類,包括sp、wp、RefBase、Thread等類,同步類,以及Java中的Handler類和Looper類,掌握這些類的知識後方能在後續的代碼分析中做到游刃有餘;
第6章以MediaServer為切入點,對Android中極為重要的Binder進行了較為全面的分析,深刻揭示了其本質。
第7章對Audio系統進行了深入的分析,尤其是AudioTrack、AudioFlinger和AudioPolicyService等的工作原理。
第8章深入講解了Surface系統的實現原理,分析了Surface與Activity之間以及Surface與SurfaceFlinger之間的關系、SurfaceFlinger的工作原理、Surface系統中的幀數據傳輸以及LayerBuffer的工作流程。
第9章對Vold和Rild的原理和機制進行了深入的分析,同時還探討了Phone設計優化的問題;
第10章分析了多媒體系統中MediaScanner的工作原理。
本書適合有一定基礎的Android應用開發工程師和系統工程師閱讀。通過對本書的學習,大家將能更深刻地理解Android系統,從而自如應對實際開發中遇到的難題。
作者簡介 :
鄧凡平,資深Android開發工程師,熱衷於Android源代碼的研究,對Android的架構設計和實現原理有非常深刻的認識和理解,應用開發經驗也十分豐富。目前就職於國內一家領先的Android企業,負責Framework的開發和維護。樂於分享,活躍於CSDN等專業社區,撰寫的Android Framework源碼的系列文章深受讀者歡迎。此外,他對Linux內核、C/C++/Python相關的技術,以及高性能網路伺服器和多核並行開發等也有一定的研究。

3. 學習android的framework層的代碼,有什麼書籍嗎

鄧凡平的 深入理解Android 和老羅的 Android源碼情景分析 你可以看一看





4. 基於android的內核與系統架構源碼分析怎麼樣

如今,大家面對市場中種類繁多的手機必然挑的眼花繚亂。不過,在智能手機占據主要地位的今天,挑選手機的主要因素就是挑選一款性能高的手機操作系統,Android就是其中的一個必然選擇。Android系統架構和其操作系統一樣,採用了分層的架構。Android分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。 Android系統架構之應用程序 Android會同一系列核心應用程序包一起發布,該應用程序包包括email客戶端,SMS短消息程序,日歷,地圖,瀏覽器,聯系人管理程序等。所有的應用程序都是使用JAVA語言編寫的。 Android系統架構之應用程序框架 開發人員也可以完全訪問核心應用程序所使用的API框架。該應用程序的架構設計簡化了組件的重用;任何一個應用程序都可以發布它的功能塊並且任何其它的應用程序都可以使用其所發布的功能塊(不過得遵循框架的安全性限制)。同樣,該應用程序重用機制也使用戶可以方便的替換程序組件。 隱藏在每個應用後面的是一系列的服務和系統, 其中包括; * 豐富而又可擴展的視圖(Views),可以用來構建應用程序, 它包括列表(lists),網格(grids),文本框(text boxes),按鈕(buttons), 甚至可嵌入的web瀏覽器。 * 內容提供器(Content Providers)使得應用程序可以訪問另一個應用程序的數據(如聯系人資料庫), 或者共享它們自己的數據 * 資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字元串,圖形,和布局文件( layout files )。 * 通知管理器 (Notification Manager) 使得應用程序可以在狀態欄中顯示自定義的提示信息。 * 活動管理器( Activity Manager) 用來管理應用程序生命周期並提供常用的導航回退功能。 有關更多的細節和怎樣從頭寫一個應用程序,請參考 如何編寫一個 Android 應用程序. Android系統架構之系統運行庫 1)程序庫 Android 包含一些C/C++庫,這些庫能被Android系統中不同的組件使用。它們通過 Android 應用程序框架為開發者提供服務。以下是一些核心庫: * 系統 C 庫 - 一個從 BSD 繼承來的標准 C 系統函數庫( libc ), 它是專門為基於 embedded linux 的設備定製的。 * 媒體庫 - 基於 PacketVideo OpenCORE;該庫支持多種常用的音頻、視頻格式回放和錄制,同時支持靜態圖像文件。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。 * Surface Manager - 對顯示子系統的管理,並且為多個應用程序提 供了2D和3D圖層的無縫融合。 * LibWebCore - 一個最新的web瀏覽器引擎用,支持Android瀏覽器和一個可嵌入的web視圖。 * SGL - 底層的2D圖形引擎 * 3D libraries - 基於OpenGL ES 1.0 APIs實現;該庫可以使用硬體 3D加速(如果可用)或者使用高度優化的3D軟加速。 * FreeType -點陣圖(bitmap)和矢量(vector)字體顯示。 * SQLite - 一個對於所有應用程序可用,功能強勁的輕型關系型資料庫引擎。 2)Android 運行庫 Android 包括了一個核心庫,該核心庫提供了JAVA編程語言核心庫的大多數功能。 每一個Android應用程序都在它自己的進程中運行,都擁有一個獨立的Dalvik虛擬機實例。Dalvik被設計成一個設備可以同時高效地運行多個虛擬系統。 Dalvik虛擬機執行(.dex)的Dalvik可執行文件,該格式文件針對小內存使用做了優化。同時虛擬機是基於寄存器的,所有的類都經由JAVA編譯器編譯,然後通過SDK中 的 “dx” 工具轉化成.dex格式由虛擬機執行。 Dalvik虛擬機依賴於linux內核的一些功能,比如線程機制和底層內存管理機制。 Android系統架構之Linux 內核 Android 的核心系統服務依賴於 Linux 2.6 內核,如安全性,內存管理,進程管理, 網路協議棧和驅動模型。 Linux 內核也同時作為硬體和軟體棧之間的抽象層。

5. 有出來這么多Android的書嗎,還沒看過

android的,因為只接觸過android,不了解ios。下面的書都是個人或同事看過的,推薦但不必須看 1.Google Android揭秘 [美] W.Frank Ableson Charlie Collins Robi Sen著;張波 高朝勤 楊越 等 譯/2010-04-01/人民郵電出版 這本書出得比較早 2010年,介紹的比較全面,入門級讀物,不得不佩服老外寫得書由淺入深層次感非常好,理論和例子結合也不錯,初學的話用它可以先了解個大概,缺點就是書中所sdk太古老了。 2 Google Android SDK開發範例大全(第2版) 余志龍等著,王世江改編/2010-06-01/人民郵電出版社 這本書更像是工具書手冊,裡面有大量的小例子,2010年的時候還是第一版呢。優點例子豐富,缺點深度不夠,不過只是想熟悉api調用方式的話應該也夠了。 3.Android應用開發揭秘 楊豐盛著/2010-01-01/機械工業出版社 相比前兩本,這本有了深度,內容也豐富了許多,只是我沒有看全,優缺點就算了,不過還是推薦看的 4.深入理解Android: 卷1 卷2 鄧凡平 著/2012-08-01/機械工業出版社 兩本書都不錯,對了解系統級原理很有幫助,非常推薦看,就是看這兩本書要有點基礎,不然很容易覺得太苦澀而放棄 5 Android系統源代碼情景分析 羅升陽著/2012-10-01/電子工業出版社 和第4本一樣,系統原理的,也非常推薦看,缺點實體書太厚了, 6 精通Android游戲開發 (美)席爾瓦著,王恆等譯/2011-02-01/人民郵電出版社 關於游戲的一本,老外寫得書趣味性和層次性都不錯,重點本地游戲如何移植到Android JNI使用, 就這些吧,現在android的書已經很多了,當然也比較雜,入門的話大多數都可以,再往下優秀的書就不多了,可以去當當,豆瓣這類網站去看書評,銷售量,群眾的眼睛是雪亮的

6. 怎麼分析一個android應用程序的源碼

一般工程的AndroidManifest.xml里包含下面代碼的是主界面

<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>

<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>

找到主界面後就根據主界面的函數找其他界面的入口,一點一點的分析就好了

7. 求大神推薦分析Android4.4 系統源碼的資料(最好是書),急求,非常感謝!

可以參考這個網站上的資料http://www.2cto.com/kf/201401/271219.html

8. 此老羅 彼老羅 老羅到底是哪個老羅

此老羅 彼老羅 老羅到底是哪個老羅
錘子的老羅,寫博客的寫書老羅,視頻教程的老羅。視頻教程的老羅是羅升陽
羅升陽,Android系統源代碼情景分析的作者,結合使用情景,全面、深入、細致地分析Android系統的源代碼,涉及到Linux內核層、硬體抽象層、運行時庫層、應用程序框架層以及應用程序層。在組織上,本書將上述內容劃分為初識Android系統、Android專用驅動系統和Android應用程序框架三大篇章。初識Android系統篇介紹了參考書籍、基礎知識以及實驗環境搭建;Android專用驅動系統篇介紹了Logger日誌驅動程序、Binder進程間通信驅動程序以及Ashmem匿名共享內存驅動程序;Android應用程序框架篇從組件、進程、消息以及安裝四個維度來對Android應用程序的框架進行了深入的剖析。

9. Android 是怎麼啟動一個Acitivity的

可以把啟動過程分為client端和server端。
一、client端在啟動一個Activity時進行的工作
備註:我個人理解,client端指的是相對後台ActivityManagerService 進程來說的前台用戶可見的進程,如在界面啟動某一個Activity的就是Laucher進程。這里則以從home桌面啟動一個Activity來分析啟動過程:
(1)Launcher 這個進程的主線程,在捕獲onClick點擊事件後,調用 startActivitySafely 方法, startActivitySafely 方法內部調用了
startActivity 方法,然後,startActivity方法進而調用Launcher的父類Activity的 startActivity方法;
(2)Activity.startActivity方法 調用startActivityForResult 方法,傳入該方法 的requestCode 參數為 -1 ,表示 Activity啟動成功後,不需要執行 Lanucher.onActivityResult方法處理返回結果;startActivityForResult方法內部需要調用 Instrumentation 的 execStartActivity方法。Instrumentation 對象是用於監控應用程序和系統(主要是 Activity Manager )的交互過程。
(3)execStartActivity方法會把將要啟動的Activity相關信息傳送到ActivityManagerService 如果 ActivityMonitor 對啟動Activity 進行檢查沒問題,那麼會調用 ActivityManagerNative.getDault 得到ActivityManagerProxy代理對象,然後調用該代理對象的startActivity方法。;
(4)調用ActivityManagerProxy代理對象的startActivity方法實際上是調用 BinderProxy.transact向 Binder驅動發送 START_ACTIVITY_TRANSACTION命令,此時就從Lanucher進程切換到ActivityManagerService進程了。
總結上述四步:源Activity(這里是Launcher)所屬進程通過一系列方法,(無論是通過Launcher來啟動Activity,還是通過Activity內部調用startActivity介面來啟動新的Activit),都通過Binder進程間通信進入到ActivityManagerService進程中,並且調用ActivityManagerService.startActivity介面;

二、Lanucher進程處理Activity的啟動請求,就是Client端的工作,傳遞給 Server端的 ActivityManagerService 後。就是ActivityManagerService 進程的處理過程 了。
處理過程將分為 7個階段
1、第一階段——預啟動檢查
這個階段,主要工作是檢查是否有許可權啟動該Activity,查詢系統中是否存在指定Intent的Activity, 檢查Intent是否正確,檢查當前能否切換Activity,各種檢查通過後創建目標Activity的ActivityRecord, 判斷是否有可復用的Task 或者Activity ,有則關聯ActivityRecord,無則新建Task ,更新 ActivityManagerService中Task的數量,檢查回退棧頂是否有顯示的Activity,有則暫停。
2、第二階段——暫停
這個階段的主要工作就是暫停啟動目標 Activity的源Activity,比如,我是從Actvity A啟動Activity B的,那麼在啟動B之前需要把A暫停,
針對暫停的Activity的後續處理,要麼是執行destroy 操作,要麼是存入等待stop列表;
3、第三階段——創建目標Activity所運行的進程
准備切換動畫,查詢ActivityManagerService 的mProcessNames變數中是否存在指定的進程信息,有則復用,直接啟動Activity,無則通過zygote啟動一個新的進程。進程啟動超時時間一般是10s。
4、第四階段——載入應用程序Activity
進程入口是 ActivityThread 的main方法,main方法里的主要工作是設置臨時進程名,創建 UI主線程ActivityThread ,並調用其attach方法,最後進入主線程的消息循環。接下來的工作是為低內存設備禁用硬體加速,創建應用程序對應的Application, 並初始化,安裝 Content Provider,執行Instrumentation的onCreate方法,執行Application的 onCreate方法。
5、第五階段——顯示Acitivity
在ActivityManagerService 所在進程向應用程序主線程的消息循環發送 LANUCHER_ACTIVITY消息,然後在主線程中回調Activity生命周期的onCreate, onStart,onResume等方法來顯示 Activity,onResume方法執行完畢後,需要先把當前顯示Activity所在的Task加入最近Task列表,然後才返回ActivityManagerService作後續處理。(在onResume方法之前,還可能會先回調onNewIntent 和 onActivityResult方法)

6、第六階段——處理處於空閑狀態的Activitiy
包括移除ActivityStack消息循環中的超時MSG,停止待停止列表總得Activity,銷毀待銷毀的Activity,如果是系統啟動階段,還要發送一個ACTION_BOOT_COMPLETEED廣播,回收待回收應用程序進程等。最重要的一個操作就是停止源Activity 。

備註:此文是讀書所得,主要歸納於老羅的《Android 源代碼情景分析》和楊雲君老師的《Android的設計與實現I》。

10. 有研究android系統源碼的博客嗎

我幹了3年Android sdk開發,覺得到了瓶勁沒法更進一步,於是花了一年多點時間,大概摸到點門徑。根據前輩的經驗,Android底層完全入門需要兩年。

先說下我的入門過程:
第零步,下載源碼,我下的4.2的,框架層源碼10G,內核2G多,ctags給框架層建的標簽文件都有600M,當時讓我有點震撼,用的vim+ctags+cscope來閱讀,還算不錯,架構挺清晰的。

第一步,我找到了一本好書《Android的設計與實現 第一卷》它講了Android框架層的啟動,初始化,服務框架初始化,Binder,消息循環,PackageManagerService,ActivityManagerService。據作者說後面會出講UI子系統的第二卷,拭目以待。其實這本書看了幾十頁我就發現需要第二步的知識,否則看不下去,於是跳去第二步。

第二步,學習Linux系統編程,在看《Android的設計與實現》的時候我發現,框架層的Native部分,全是Linux編程。為了掌握這部分知識,我花了4個月學習了《Linux系統編程手冊》(TLPI)這本1000多頁的書,我以前是搞WIndows文件系統這塊的,所以C語言還比較熟,TLPI的習題很有意思,量也比較大,堅持下來還是收獲很多。

第三步,花了4個月學習了一些Linux內核的知識,看了LKD,PLKA看了一半多。越學越沒底,覺得不懂得越來越多,不過這個也正常,只有靠慢慢磨,估計以後要不斷的磨這塊。

第四步,回頭看Android源碼,這次一口氣看完了《Android的設計與實現 第一卷》,終於對框架層有了譜。同時真的數次把我看暈,前面看Linux內核源碼都沒這么暈,不斷在Java層和Native層之間跳有點磨腦漿。其中我又覺得Java的基礎沒有打太牢,回去補了一個月的《Core Java》第八版。但是這書沒有涉及UI子系統,於是又看了《Android內核剖析》

第五步,《Android內核剖析》(這本書實際上是講框架層的,作者也是個搞嵌入式的,所以他在寫框架層的時候文筆不太好,很羅嗦,不過還是有很多看點,到他後來寫做ROM,玩開發板時估計是說到了他的本行,一下子遛起來了看得出還是挺有水平的,這本書知識有點舊畢竟講的是2.3很多代碼已經過時,但是作者很多點子很有參考價值)這本書講UI子系統和按鍵/觸摸消息處理系統還是很有分量的,尤其13章View繪制那裡,結合源碼研究很有收獲。而後面他講編譯框架和ROM相關的東西都是挺寶貴的資料。

第六步,為了再補一下其他諸如電源管理模塊等子系統的知識看了,《深入理解android》系列,個人認為這個系列看起來有點不太舒服,不過作為補充印證還是比較有價值。

第七步,《Android系統源代碼情景分析》,羅升陽的源碼分析大作,比《Android的設計與實現》分析得更細致,但缺點是涉及到模塊比較少,選用的源碼也比《Android的設計與實現》更舊一點。看完書後需要去研究作者的博客,東西挺多的,一定讓你滿意。

第八步,買塊開發板自己玩。這步我還沒走到,原因是我覺得我還差點准備知識。可能要再幾個月,到時准備入塊6410或者樹莓派。

最後,由於我11年以前都是搞Windows這塊的,所以對Linux知識不是很了解,不得已看了這么些書,如果是一直做Linux的人,很多步驟估計可以省掉了。直接上源碼才是正道。

我本身做著移動GIS開發的工作,學框架層全是因為興趣,但招聘平台Android框架層開發人員還是蠻有競爭力的有不少定製ROM,智能電視的工作都處於人才難求狀態,畢竟有一定的門檻,現在各種ios培訓,讓奔著錢干開發的人紛紛湧入,而ios只能幹sdk開發的缺點就暴露出來了,一堆新手老手,菜鳥大牛全擠在SDK開發這塊,我覺得不太妙。 反觀Android這邊,雖然入門菜鳥沒有搞ios來錢,但是可持續性很好,從sdk-》框架》驅動》內核這樣幹下去。干著干著發現自己漸漸變成了Linux開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。
轉載

熱點內容
標簽匹配演算法 發布:2024-10-06 06:37:23 瀏覽:221
雲頂之弈腳本 發布:2024-10-06 06:37:23 瀏覽:764
jsp與javaweb 發布:2024-10-06 06:32:13 瀏覽:294
c語言修飾符 發布:2024-10-06 06:27:09 瀏覽:276
有解壓密碼的壓縮包 發布:2024-10-06 06:18:46 瀏覽:72
分鏡頭腳本模板廣告 發布:2024-10-06 06:18:44 瀏覽:14
大眾邁騰車輛密碼在哪裡 發布:2024-10-06 06:05:51 瀏覽:673
access資料庫亂碼 發布:2024-10-06 06:05:18 瀏覽:322
光遇安卓音韻季有什麼 發布:2024-10-06 05:06:51 瀏覽:76
apk腳本破解 發布:2024-10-06 04:33:23 瀏覽:52