android啟動源碼分析
『壹』 怎樣運行Android源代碼
小編初學android的時候也不知道如何導入源碼,但經過半天的琢磨··終於找到了一個好的捷徑。 第一步在Eclipse 開發環境中,選擇File---》import
第二步選中所要導入的文件
第三步 選中導入的項目,右鍵選擇Properties--》
第四步 選擇「Android」選項,勾選TargName,然後單擊OK。小提示:TagName要與你當前模擬器的版本匹配,比如筆者的是android 2.3.3。
第五步 在導入的項目按滑鼠右鍵 ,單擊Android tool ---》Fix Project Properties
這樣子··你下載的源碼就可以運行了,雖然步驟煩瑣了一點,但是操作多了就了就順手了。 不過··大家有什麼更便捷的方法也可以推薦給我。
『貳』 怎麼分析一個android應用程序的源碼
一般工程的AndroidManifest.xml里包含下面代碼的是主界面
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>
<categoryandroid:name="android.intent.category.LAUNCHER"/>
</intent-filter>
找到主界面後就根據主界面的函數找其他界面的入口,一點一點的分析就好了
『叄』 基於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 內核也同時作為硬體和軟體棧之間的抽象層。
『肆』 Android系統源代碼情景分析 這本書有人看過嗎
II和III來表示,錯誤所在的頁碼使用字母P來表示。
1. P3,倒數第2行(III):sudo add-apt-repository ppa:ferramrobert/Java。由於License問題(http://askubuntu.com/questions/109209/sun-java6-plugin-has-no-installation-candidate),官方的Sun JDK6不能在Ubuntu上發布,因此,現在從下載源ferramrobert已經下載不到JDK6來安裝了,可以通過修改安裝源來解決這個問題,如下所示:
A. sudo add-apt-repository "deb http://us.archive.ubuntu.com/ubuntu/ hardy multiverse"
B. sudo apt-get update
C. sudo apt-get install sun-java6-jre sun-java6-plugin
『伍』 android 2.1的源碼分析之長按電源鍵彈出對話框功能修改
android 2.1的源碼分析之長按電源鍵彈出對話框功能修改的方法為:
1、在PhoneWindowManager的interceptKeyTq方法中,代碼是這一行mHandler.postDelayed(mPowerLongPress,ViewConfiguration.getGlobalActionKeyTimeout()); mProwerLongPress是一個Runnable,執行時調用GlobalActions中的showDialog方法。
2、所以這個dialog是由GlobalActions管理的,PowerDialog是之前版本中的,現在已經棄用了。 2.可以在GlobalActions中createDialog方法中mSilentModeToggle action的onToggle方法中加入mAudioManager.setVibrateSetting(AudioManager.VIBRATE_TYPE_RINGER, on ? AudioManager.VIBRATE_SETTING_ON : AudioManager.VIBRATE_SETTING_OFF);
『陸』 如何分析學習Android系統的源代碼
親,很高興為您解答,網上有一本免費的電子書,就是介紹「學習android系統源代碼」的,你可以下載下來參考。希望能幫助到您,望採納。
『柒』 Android系統源代碼情景分析的網友評論
強大的羅大師,感謝你的Android之旅,我已看完你的6篇教程,雖然我還不太懂,但是我相信你就是我打開它的那把鑰匙,再次感謝你的教程。
——mutex_js
老羅,寫的太精彩啦!不僅僅是在Android 按鍵機制方面令人受益匪淺,給我在學習其他模塊上也提供了一套很好的分析思路。非常感謝!
——yuleslie
看你的文章,收獲很多,分析得很透徹,思路清晰,前後呼應,成系統,對我幫助很大,非常感謝你的無私奉獻!
——kenen2006
你的博客給了我一種非常刺激的體驗,讓我更深層次地認識Android。非常感謝你的講解,太棒了!
——stevenhu_223
我真的想放棄這個行業,可我看到你的博客,讓我看到了希望,讓我充滿了信心和堅定!
——zhudeqing
看過幾本Andriod方面的書,但還真比不上這里的博客。羅老師的Linux內核知識及對軟體架構的知識積累用功很深,代碼閱讀能力也很強!膜拜!
——herodie
我是看你的博客開始學Android的,寫的真的太好了。每一個系列都自成一體,無需其他參考。從頂到下都能串到一起,這樣看起來最痛快了!
——hellowolrd
本人語言功底也不是很好,所以系統學習Android也經歷了不少困難。3個多月了,反反復復閱讀你的博文;每一次都有進步,每一次的進步也都有不同的方向。謝謝!技術的道路上真沒有捷徑,更不可以偷懶。我將不懈努力!謝謝博主,期待您能出書!
——tankai19880619
剛看到老羅的這篇新作,還挺熱乎的。忍不住分N口氣讀完,膜拜!讀完後,有些有意思的想法,從文章本身來看,很精彩。這篇文章老羅至少說明了一下問題:
1. 兩種最典型的使用場景及他們的區別(UI相關與否);
2. 引出來兩種線程消息處理模型;
3. 用實例解釋兩種模型是如何使用的;
4. 最後介紹兩種模型的是怎樣實現的。
該文章不但告訴我們what(該文的主旨)、how (怎樣使用),還有why(怎麼實現)。
偶的神,一篇文章里寫了這么多,還能寫的這么清楚。不容易啊!
——rambo2188
太牛了!我是一個剛從事Android開發的新人,你的文章真是入木三分,讀了很有啟發,你的這種分析Android方式很棒!為了造福更多的Android學習者,建議你出書!
——yang105
我覺得也許學習這些知識並不算難,可是要做到時刻有一個清晰的思路去學並且能夠把學過東西用通俗易懂的話語表達出來挺難的。必盡自身知識有限,有些東西可能一下子無法深刻理解。樓主是怎麼做到的呢?感覺樓主的每篇文章都講的精練透徹,主要是能把問題全講出來。我想樓主的知識面一定很廣!
——wantianpei
前言
雖然Android系統自2008年9月發布第一個版本1.0以來,2011年10月發布最新版本4.0,一共存在十多個版本,但是據官方統計,截至2012年3月5日,占據首位的是Android 2.3,市場佔有率達到66.5%;其次是Android 2.2,市場佔有率為25.3%;第三位是Android 2.1,市場佔有率為6.6%;而最新發布的Android 3.2和Android 4.0的市場佔有率只有3.3%和2%。因此,在本書中,我們選擇了Android 2.3的源代碼來分析Android系統的實現,一是因為它的基礎架構是最穩定的;二是因為它是使用最廣泛的。
本書內容
全書分為初識Android系統篇、Android專用驅動系統篇和Android應用程序框架篇三個部分。
初識Android系統篇包含三個章節的內容,主要介紹Android系統的基礎知識。第1章介紹與Android系統有關的參考書籍,以及Android源代碼工程環境的搭建方法;第2章介紹Android系統的硬體抽象層;第3章介紹Android系統的智能指針。讀者可能會覺得奇怪,為什麼一開始就介紹Android系統的硬體抽象層呢?因為涉及硬體,它似乎是一個深奧的知識點。其實不然,Android系統的硬體抽象層無論是從實現上,還是從使用上,它的層次都是非常清晰的,而且從下到上涵蓋了整個Android系統,包括Android系統在用戶空間和內核空間的實現。內核空間主要涉及硬體驅動程序的編寫方法,而用戶空間涉及運行時庫層、應用程序框架層及應用程序層。因此,盡早學習Android系統的硬體抽象層,有助於我們從整體上去認識Android系統,以便後面可以更好地分析它的源代碼。在分析Android系統源代碼的過程中,經常會碰到智能指針,第3章我們就重點分析Android系統智能指針的實
現原理,也是為了後面可以更好地分析Android系統源代碼。
Android專用驅動系統篇包含三個章節的內容。我們知道,Android系統是基於Linux內核來開發的,但是由於移動設備的CPU和內存配置都要比PC低,因此,Android系統並不是完全在Linux內核上開發的,而是在Linux內核裡面添加了一些專用的驅動模塊來使它更適合於移動設備。這些專用的驅動模塊同時也形成了Android系統的堅實基礎,尤其是Logger日誌驅動程序、Binder進程間通信驅動程序,以及Ashmem匿名共享內存驅動程序,它們在Android系統中被廣泛地使用。在此篇中,我們分別在第4章、第5章和第6章分析Logger日誌系統、Binder進程間通信系統和Ashmem共享內存系統的實現原理,為後面深入分析Android應用程序的框架打下良好的基礎。
Android應用程序框架篇包含十個章節的內容。我們知道,在移動平台中,Android系統、iOS系統和Windows Phone系統正在形成三足鼎立之勢,誰的應用程序更豐富、質量更高、用戶體驗更好,誰就能取得最終的勝利。因此,每個平台都在盡最大努力吸引第三方開發者來為其開發應用程序。這就要求平台必須提供良好的應用程序架構,以便第三方開發者可以將更多的精力集中在應用程序的業務邏輯上,從而開發出數量更多、質量更高和用戶體驗更好的應用程序。在此篇中,我們將從組件、進程、消息和安裝四個維度來分析Android應用程序的實現框架。第7章到第10章分析Android應用程序四大組件Activity、Service、Broadcast Receiver和Content Provider的實現原理;第11章和第12章分析Android應用程序進程的啟動過程;第13章到第15章分析Android應用程序的消息處理機制;第16章分析Android應用程序的安裝和顯示過程。學習了這些知識之後,我們就可以掌握Android系統的精髓了。
本書特點
本書從初學者的角度出發,結合具體的使用情景,在縱向和橫向上對Android系統的源代碼進行了全面、深入、細致的分析。在縱向上,採用從下到上的方式,分析的源代碼涉及了Android系統的內核層(Linux Kernel)、硬體抽象層(HAL)、運行時庫層(Runtime)、應用程序框架層(Application Framework)以及應用程序層(Application),這有利於讀者從整體上掌握Android系統的架構。在橫向上,從Android應用程序的組件、進程、消息以及安裝四個角度出發,全面地剖析了Android系統的應用程序框架層,這有利於讀者深入地理解Android應用程序的架構以及運行原理。
『捌』 有研究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開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。
轉載
『玖』 怎樣評價羅升陽的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開發者/嵌入式開發者的人也不少,新人,老手,菜鳥大牛各居其位,層次性很好。 轉載