導航:首頁 > 操作系統 > 深入理解android5源代碼

深入理解android5源代碼

發布時間:2022-07-19 06:50:35

A. 深入理解android的作品目錄

第1章 閱讀前的准備工作 / 1
1.1 系統架構 / 2
1.1.1 Android系統架構 / 2
1.1.2 本書的架構 / 3
1.2 搭建開發環境 / 4
1.2.1 下載源碼 / 4
1.2.2 編譯源碼 / 6
1.3 工具介紹 / 8
1.3.1 Source Insight介紹 / 8
1.3.3 Busybox的使用 / 11
1.4 本章小結 / 12
第2章 深入理解JNI / 13
2.1 JNI概述 / 14
2.2 學習JNI的實例:MediaScanner / 15
2.3 java層的MediaScanner分析 / 16
2.3.1 載入JNI庫 / 16
2.3.2 Java的native函數和總結 / 17
2.4 JNI層MediaScanner的分析 / 17
2.4.1 注冊JNI函數 / 18
2.4.2 數據類型轉換 / 22
2.4.3 JNIEnv介紹 / 24
2.4.4 通過JNIEnv操作jobject / 25
2.4.5 jstring介紹 / 27
2.4.6 JNI類型簽名介紹 / 28
2.4.7 垃圾回收 / 29
2.4.8 JNI中的異常處理 / 32
2.5 本章小結 / 32
第3章 深入理解init / 33
3.1 概述 / 34
3.2 init分析 / 34
3.2.1 解析配置文件 / 38
3.2.2 解析service / 42
3.2.3 init控制service / 48
3.2.4 屬性服務 / 52
3.3 本章小結 / 60
第4章 深入理解zygote / 61
4.1 概述 / 62
4.2 zygote分析 / 62
4.2.1 AppRuntime分析 / 63
4.2.2 Welcome to Java World / 68
4.2.3 關於zygote的總結 / 74
4.3 SystemServer分析 / 74
4.3.1 SystemServer的誕生 / 74
4.3.2 SystemServer的重要使命 / 77
4.3.3 關於 SystemServer的總結 / 83
4.4 zygote的分裂 / 84
4.4.1 ActivityManagerService發送請求 / 84
4.4.2 有求必應之響應請求 / 86
4.4.3 關於zygote分裂的總結 / 88
4.5 拓展思考 / 88
4.5.1 虛擬機heapsize的限制 / 88
4.5.2 開機速度優化 / 89
4.5.3 Watchdog分析 / 90
4.6 本章小結 / 93
第5章 深入理解常見類 / 95
5.1 概述 / 96
5.2 以「三板斧」揭秘RefBase、sp和wp / 96
5.2.1 第一板斧——初識影子對象 / 96
5.2.2 第二板斧——由弱生強 / 103
5.2.3 第三板斧——破解生死魔咒 / 106
5.2.4 輕量級的引用計數控制類LightRefBase / 108
5.2.5 題外話—三板斧的來歷 / 109
5.3 Thread類及常用同步類分析 / 109
5.3.1 一個變數引發的思考 / 109
5.3.2 常用同步類 / 114
5.4 Looper和Handler類分析 / 121
5.4.1 Looper類分析 / 122
5.4.2 Handler分析 / 124
5.4.3 Looper和Handler的同步關系 / 127
5.4.4 HandlerThread介紹 / 129
5.5 本章小結 / 129
第6章 深入理解Binder / 130
6.1 概述 / 131
6.2 庖丁解MediaServer / 132
6.2.1 MediaServer的入口函數 / 132
6.2.2 獨一無二的ProcessState / 133
6.2.3 時空穿越魔術—defaultServiceManager / 134
6.2.4 注冊MediaPlayerService / 142
6.2.5 秋風掃落葉—StartThread Pool和join Thread Pool分析 / 149
6.2.6 你徹底明白了嗎 / 152
6.3 服務總管ServiceManager / 152
6.3.1 ServiceManager的原理 / 152
6.3.2 服務的注冊 / 155
6.3.3 ServiceManager存在的意義 / 158
6.4 MediaPlayerService和它的Client / 158
6.4.1 查詢ServiceManager / 158
6.4.2 子承父業 / 159
6.5 拓展思考 / 162
6.5.1 Binder和線程的關系 / 162
6.5.2 有人情味的訃告 / 163
6.5.3 匿名Service / 165
6.6 學以致用 / 166
6.6.1 純Native的Service / 166
6.6.2 扶得起的「阿斗」(aidl) / 169
6.7 本章小結 / 172
第7章 深入理解Audio系統 / 173
7.1 概述 / 174
7.2 AudioTrack的破解 / 174
7.2.1 用例介紹 / 174
7.2.2 AudioTrack(Java空間)分析 / 179
7.2.3 AudioTrack(Native空間)分析 / 188
7.2.4 關於AudioTrack的總結 / 200
7.3 AudioFlinger的破解 / 200
7.3.1 AudioFlinger的誕生 / 200
7.3.2 通過流程分析AudioFlinger / 204
7.3.3 audio_track_cblk_t分析 / 230
7.3.4 關於AudioFlinger的總結 / 234
7.4 AudioPolicyService的破解 / 234
7.4.1 AudioPolicyService的創建 / 235
7.4.2 重回AudioTrack / 245
7.4.3 聲音路由切換實例分析 / 251
7.4.4 關於AudioPolicy的總結 / 262
7.5 拓展思考 / 262
7.5.1 DuplicatingThread破解 / 262
7.5.2 題外話 / 270
7.6 本章小結 / 272
第8章 深入理解Surface系統 / 273
8.1 概述 / 275
8.2 一個Activity的顯示 / 275
8.2.1 Activity的創建 / 275
8.2.2 Activity的UI繪制 / 294
8.2.3 關於Activity的總結 / 296
8.3 初識Surface / 297
8.3.1 和Surface有關的流程總結 / 297
8.3.2 Surface之乾坤大挪移 / 298
8.3.3 乾坤大挪移的JNI層分析 / 303
8.3.4 Surface和畫圖 / 307
8.3.5 初識Surface小結 / 309
8.4 深入分析Surface / 310
8.4.1 與Surface相關的基礎知識介紹 / 310
8.4.2 SurfaceComposerClient分析 / 315
8.4.3 SurfaceControl分析 / 320
8.4.4 writeToParcel和Surface對象的創建 / 331
8.4.5 lockCanvas和unlockCanvasAndPost分析 / 335
8.4.6 GraphicBuffer介紹 / 344
8.4.7 深入分析Surface的總結 / 353
8.5 SurfaceFlinger分析 / 353
8.5.1 SurfaceFlinger的誕生 / 354
8.5.2 SF工作線程分析 / 359
8.5.3 Transaction分析 / 368
8.5.4 關於SurfaceFlinger的總結 / 376
8.6 拓展思考 / 377
8.6.1 Surface系統的CB對象分析 / 377
8.6.2 ViewRoot的你問我答 / 384
8.6.3 LayerBuffer分析 / 385
8.7 本章小結 / 394
第9章 深入理解Vold和Rild / 395
9.1 概述 / 396
9.2 Vold的原理與機制分析 / 396
9.2.1 Netlink和Uevent介紹 / 397
9.2.2 初識Vold / 399
9.2.3 NetlinkManager模塊分析 / 400
9.2.4 VolumeManager模塊分析 / 408
9.2.5 CommandListener模塊分析 / 414
9.2.6 Vold實例分析 / 417
9.2.7 關於Vold的總結 / 428
9.3 Rild的原理與機制分析 / 428
9.3.1 初識Rild / 430
9.3.2 RIL_startEventLoop分析 / 432
9.3.3 RIL_Init分析 / 437
9.3.4 RIL_register分析 / 444
9.3.5 關於Rild main函數的總結 / 447
9.3.6 Rild實例分析 / 447
9.3.7 關於Rild的總結 / 459
9.4 拓展思考 / 459
9.4.1 嵌入式系統的存儲知識介紹 / 459
9.4.2 Rild和Phone的改進探討 / 462
9.5 本章小結 / 463
第10章 深入理解MediaScanner / 464
10.1 概述 / 465
10.2 android.process.media分析 / 465
10.2.1 MSR模塊分析 / 466
10.2.2 MSS模塊分析 / 467
10.2.3 android.process.media媒體掃描工作的流程總結 / 471
10.3 MediaScanner分析 / 472
10.3.1 Java層分析 / 472
10.3.2 JNI層分析 / 476
10.3.3 PVMediaScanner分析 / 479
10.3.4 關於MediaScanner的總結 / 485
10.4 拓展思考 / 486
10.4.1 MediaScannerConnection介紹 / 486
10.4.2 我問你答 / 487
10.5 本章小結 / 488

B. android軟體開發 怎麼讀懂一個android源代碼

一開始都會感覺到疑惑,網路上,論壇上,甚至是書本上都講不清楚,不知道這是什麼原因,我想人類的私心在裡面會占據很大的因素。
不是每個人都願意分享自己辛苦得來的經驗和心得。
android軟體,你可以這么看,它是用java語言+很多很多的現成的已經被別人寫到的包組合成的。

其實它的本質就是java,然後那些界面什麼,其實核心就是一個叫做XML的東西。
這個XML其實也沒什麼神秘,就是一個國際化的,標準的標簽。
然後標簽其實說白了就是記號,你在這個XML文件裡面,按照谷歌給你定好的游戲規則,寫標簽,然後這個標簽會被自動解析成相應功能。
整個android界面其實就是一個XML文件,android表面上的東西幾乎都是XML文件組成的,剩下的核心程序邏輯,其實就是java程序。
再換句話說,你可以在java上把程序邏輯寫好,然後單獨寫個XML文件,然後合並起來,就是android

C. 深入理解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相關的技術,以及高性能網路伺服器和多核並行開發等也有一定的研究。

D. 有研究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開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。
轉載

E. 如何閱讀android framework源碼

由於工作需要大量修改framework代碼,在AOSP(AndroidOpenSourceProject)源碼上花費了不少功夫,Application端和Services端都看和改了不少.如果只是想看看一些常用類的實現,在Android包管理器里把源碼下載下來,隨便一個IDE配好SourceCode的path看就行.但如果想深入的了解Android系統,那麼可以看下我的一些簡單的總結.知識JavaJava是AOSP的主要語言之一.沒得說,必需熟練掌握.熟練的AndroidApp開發LinuxAndroid基於Linux的,並且AOSP的推薦編譯環境是Ubuntu12.04.所以熟練的使用並了解Linux這個系統是必不可少的.如果你想了解偏底層的代碼,那麼必需了解基本的Linux環境下的程序開發.如果再深入到驅動層,那麼Kernel相關的知識也要具備.MakeAOSP使用Make系統進行編譯.了解基本的Makefile編寫會讓你更清晰了解AOSP這個龐大的項目是如何構建起來的.GitAOSP使用git+repo進行源碼管理.這應該是程序員必備技能吧.C++Android系統的一些性能敏感模塊及第三方庫是用C++實現的,比如:Input系統,Chromium項目(WebView的底層實現).硬體流暢的國際網路AOSP代碼下載需要你擁有一個流暢的國際網路.如果在下載代碼這一步就失去耐心的話,那你肯定沒有耐心去看那亂糟糟的AOSP代碼.另外,好程序員應該都會需要一個流暢的Google.一台運行Ubuntu12.04的PC.如果只是閱讀源碼而不做太多修改的話,其實不需要太高的配置.一台Nexus設備AOSP項目默認只支持Nexus系列設備.沒有也沒關系,你依然可以讀代碼.但如果你想在大牛之路走的更遠,還是改改代碼,然後刷機調試看看吧.高品質USB線要刷機時線壞了,沒有更窩心的事兒了.軟體Ubuntu12.04官方推薦,沒得選.OracleJava1.6注意不要用OpenJDK.這是個坑,官方文檔雖然有寫,但還是單獨提一下.安裝:sudoapt-getinstallpython-software-propertiessudoadd-apt-repositoryppa:webupd8team/javasudoapt-getupdatesudoapt-getinstalloracle-java6-installersudoapt-getinstalloracle-java6-set-defaultEclipse估計會有不少人吐槽,為什麼要用這個老古董.其實原因很簡單,合適.剛開始搞AOSP時,為了找到效率最優的工具,我嘗試過Eclipse,IntelliJIDEA,Vim+Ctags,SublimeText+Ctags.最終結果還是Eclipse.主要優點有:有語法分析(快速准確的類,方法跳轉).支持C++(IntelliJ的C++支持做的太慢了).嵌入了DDMS,ViewHierarchy等調試工具.為了提高效率,花5分鍾背下常用快捷鍵非常非常值得.調整好你的classpath,不要導入無用的代碼.因為AOSP項目代碼實在是太多了.當你還不需要看C++代碼時,不要為項目添加C++支持,建索引過程會讓你崩潰.IntellijIDEA開發App必備.當你要調試系統的某個功能是,常常需要迅速寫出一個調試用App,這個時候老舊的Eclipse就不好用了.ItellijIDEA的xml自動補全非常給力.巨人的肩膀這個一定要先讀.項目介紹,代碼下載,環境搭建,刷機方法,Eclipse配置都在這里.這是一切的基礎.這個其實是給App開發者看的.但是裡面也有不少關於系統機制的介紹,值得細讀.此老羅非彼老羅.羅升陽老師的博客非常有營養,基本可以作為指引你開始閱讀AOSP源碼的教程.你可以按照博客的時間順序一篇篇挑需要的看.但這個系列的博客有些問題:早期的博客是基於舊版本的Android;大量的代碼流程追蹤.讀文章時你一定要清楚你在看的東西在整個系統處於什麼樣的位置.鄧凡平老師也是為Android大牛,博客同樣很有營養.但是不像羅升陽老師的那麼系統.的是一些技術點的深入探討.Android官方Issue列表.我在開發過程中發現過一些奇怪的bug,最後發現這里基本都有記錄.當然你可以提一些新的,有沒有人改就是另外一回事了.一定要能流暢的使用這個工具.大量的相關知識是沒有人系統的總結的,你需要自己搞定.其它代碼組織AOSP的編譯單元不是和git項目一一對應的,而是和Android.mk文件一一對應的.善用mmm命令進行模塊編譯將節省你大量的時間.Binder這是Android最基礎的進程間通訊.在Application和Systemservices之間大量使用.你不僅要知道AIDL如何使用,也要知道如何手寫Binder介面.這對你理解Android的Application和Systemservices如何交互有非常重要的作用.Binder如何實現的倒不必著急看.HAL除非你對硬體特別感興趣或者想去方案公司上班,否則別花太多時間在這一層.CyanogenMod這是一個基於AOSP的第三方Rom.從這個項目的wiki里你能學到很多AOSP官方沒有告訴你的東西.比如如何支持Nexus以外的設備.DIA這是一個Linux下畫UML的工具,能夠幫你梳理看過的代碼.XDA這里有最新資訊和最有趣的論壇.想到了再補充.

F. 怎樣評價羅升陽的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開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。 轉載

G. 大牛們是怎麼閱讀 Android 系統源碼的

由於工作需要大量修改framework代碼, 在AOSP(Android Open Source Project)源碼上花費了不少功夫, Application端和Services端都看和改了不少.
如果只是想看看一些常用類的實現, 在Android包管理器里把源碼下載下來, 隨便一個IDE配好Source Code的path看就行.
但如果想深入的了解Android系統, 那麼可以看下我的一些簡單的總結.

知識
Java
Java是AOSP的主要語言之一. 沒得說, 必需熟練掌握.
熟練的Android App開發
Linux
Android基於Linux的, 並且AOSP的推薦編譯環境是Ubuntu 12.04. 所以熟練的使用並了解Linux這個系統是必不可少的. 如果你想了解偏底層的代碼, 那麼必需了解基本的Linux環境下的程序開發. 如果再深入到驅動層, 那麼Kernel相關的知識也要具備.
Make
AOSP使用Make系統進行編譯. 了解基本的Makefile編寫會讓你更清晰了解AOSP這個龐大的項目是如何構建起來的.
Git
AOSP使用git+repo進行源碼管理. 這應該是程序員必備技能吧.
C++
Android系統的一些性能敏感模塊及第三方庫是用C++實現的, 比如: Input系統, Chromium項目(WebView的底層實現).

硬體
流暢的國際網路
AOSP代碼下載需要你擁有一個流暢的國際網路. 如果在下載代碼這一步就失去耐心的話, 那你肯定沒有耐心去看那亂糟糟的AOSP代碼. 另外, 好程序員應該都會需要一個流暢的Google.
一台運行Ubuntu 12.04的PC.
如果只是閱讀源碼而不做太多修改的話, 其實不需要太高的配置.
一台Nexus設備
AOSP項目默認只支持Nexus系列設備. 沒有也沒關系, 你依然可以讀代碼. 但如果你想在大牛之路走的更遠, 還是改改代碼, 然後刷機調試看看吧.
高品質USB線
要刷機時線壞了, 沒有更窩心的事兒了.
軟體
Ubuntu 12.04
官方推薦, 沒得選.
Oracle Java 1.6
注意不要用OpenJDK. 這是個坑, 官方文檔雖然有寫, 但還是單獨提一下.
安裝:
sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java6-installer
sudo apt-get install oracle-java6-set-default

Eclipse
估計會有不少人吐槽, 為什麼要用這個老古董. 其實原因很簡單, 合適. 剛開始搞AOSP時, 為了找到效率最優的工具, 我嘗試過Eclipse, IntelliJ IDEA, Vim+Ctags, Sublime Text+Ctags. 最終結果還是Eclipse. 主要優點有:
有語法分析 (快速准確的類, 方法跳轉).
支持C++ (IntelliJ的C++支持做的太慢了).
嵌入了DDMS, View Hierarchy等調試工具.
為了提高效率, 花5分鍾背下常用快捷鍵非常非常值得.
調整好你的classpath, 不要導入無用的代碼. 因為AOSP項目代碼實在是太多了. 當你還不需要看C++代碼時, 不要為項目添加C++支持, 建索引過程會讓你崩潰.
Intellij IDEA
開發App必備. 當你要調試系統的某個功能是, 常常需要迅速寫出一個調試用App, 這個時候老舊的Eclipse就不好用了. Itellij IDEA的xml自動補全非常給力.
巨人的肩膀

這個一定要先讀. 項目介紹, 代碼下載, 環境搭建, 刷機方法, Eclipse配置都在這里. 這是一切的基礎.

這個其實是給App開發者看的. 但是裡面也有不少關於系統機制的介紹, 值得細讀.

此老羅非彼老羅. 羅升陽老師的博客非常有營養, 基本可以作為指引你開始閱讀AOSP源碼的教程. 你可以按照博客的時間順序一篇篇挑需要的看.但這個系列的博客有些問題:
早期的博客是基於舊版本的Android;
大量的代碼流程追蹤. 讀文章時你一定要清楚你在看的東西在整個系統處於什麼樣的位置.

鄧凡平老師也是為Android大牛, 博客同樣很有營養. 但是不像羅升陽老師的那麼系統. 更多的是一些技術點的深入探討.

Android官方Issue列表. 我在開發過程中發現過一些奇怪的bug, 最後發現這里基本都有記錄. 當然你可以提一些新的, 有沒有人改就是另外一回事了.

一定要能流暢的使用這個工具. 大量的相關知識是沒有人系統的總結的, 你需要自己搞定.
其它
代碼組織
AOSP的編譯單元不是和git項目一一對應的, 而是和Android.mk文件一一對應的. 善用mmm命令進行模塊編譯將節省你大量的時間.
Binder
這是Android最基礎的進程間通訊. 在Application和System services之間大量使用. 你不僅要知道AIDL如何使用, 也要知道如何手寫Binder介面. 這對你理解Android的Application和System services如何交互有非常重要的作用. Binder如何實現的倒不必著急看.
HAL
除非你對硬體特別感興趣或者想去方案公司上班, 否則別花太多時間在這一層.
CyanogenMod
這是一個基於AOSP的第三方Rom. 從這個項目的wiki里你能學到很多AOSP官方沒有告訴你的東西. 比如如何支持Nexus以外的設備.
DIA
這是一個Linux下畫UML的工具, 能夠幫你梳理看過的代碼.
XDA

這里有最新資訊和最有趣的論壇.
想到了再補充.

H. 如何正確學習android源代碼

1、避免建立對象
世界上沒有免費的對象。雖然GC為每個線程都建立了臨時對象池,可以使創建對象的代價變得小一些,但是分配內存永遠都比不分配內存的代價大。
如果你在用戶界面循環中分配對象內存,就會引發周期性的垃圾回收,用戶就會覺得界面像打嗝一樣一頓一頓的。
2、使用本地方法
當你在處理字串的時候,不要吝惜使用String.indexOf(), String.lastIndexOf()等特殊實現的方法。這些方法都是使用C/C++實現的,比起Java循環快10到100倍。
3、選擇虛類而不是介面
4、用靜態方法比虛方法好
如果你不需要訪問一個對象的成員變數,那麼請把方法聲明成static。虛方法執行的更快,因為它可以被直接調用而不需要一個虛函數表。另外你也可以通過聲明體現出這個函數的調用不會改變對象的狀態。
5、不用getter和setter
在很多本地語言如C++中,都會使用getter(比如:i = getCount())來避免直接訪問成員變數(i = mCount)。
6、將成員變數緩存到本地
7、使用常量
8、謹慎使用foreach
9、避免使用枚舉

I. 誰能看懂android的源碼啊怎麼看從哪裡入手

從packages開始看,系統自帶的應用程序都在這里,然後從一個應用入手,比如聯系人或者簡訊。源碼發我一份吧,下載好久沒下完。

J. 《深入理解Android 5 源代碼》怎麼樣

循序漸進地分析了Android系統的基本源代碼,依次講解了Android系統介紹,獲取並編譯Android源代碼,分析Java Native Interface系統,分析HAL系統,分析IPC通信機制,分析Binder對象和Java介面,分析ServiceManager和MessageQueue,init進程和Zygote進程,System進程和應用程序進程,分析Activity組件,應用程序管理服務分析,Content Provider、Broadcast(廣播)系統,電源管理系統分析,分析WindowManagerService系統、分析電話系統,分析簡訊系統、Sensor感測器系統詳解、分析SEAndroid系統和分析ART系統等核心知識。
適合Android初學者、Android愛好者、Android底層開發人員、Android應用開發人員學習,也可以作為相關培訓學校和大專院校相關專業師生的教學用書。

閱讀全文

與深入理解android5源代碼相關的資料

熱點內容
好興動app還款怎麼登錄不上去了 瀏覽:665
鄭州雲伺服器託管 瀏覽:722
伺服器地址跟蹤 瀏覽:980
免費google雲伺服器 瀏覽:516
摘譯和編譯的英文 瀏覽:359
熱泵壓縮機選型 瀏覽:121
op手機微信加密如何解除 瀏覽:386
如何在王牌戰爭找到高爆率伺服器 瀏覽:13
江浙小學語文輔導課用什麼APP 瀏覽:99
新夢幻大陸伺服器地址 瀏覽:241
網吧伺服器怎麼更換壁紙 瀏覽:530
linux命令方法 瀏覽:332
linux下載freetype 瀏覽:123
程序員入駐平台 瀏覽:327
程序員大戰外掛 瀏覽:745
html實例教程pdf 瀏覽:157
linux命令開放所有許可權 瀏覽:575
30歲能學會編程 瀏覽:737
小火箭的伺服器是什麼 瀏覽:967
cad查信息命令 瀏覽:402