當前位置:首頁 » 安卓系統 » android系統源代碼分析

android系統源代碼分析

發布時間: 2024-07-07 15:33:54

① 怎樣查看 Android APP源代碼

將apk文件拷貝至sdcard上。
命令順序如下:

進入Android sdk文件夾/tools目錄下
輸入adb shell
輸入su
輸入cd data
輸入cd app
這時就可以看到你安裝的所有的apk文件。輸入cp 空格 對應的apk 空格 /sdcard/
這樣就將apk文件拷貝出來了。
將apk文件後綴直接變成rar格式,可以看到熟悉的目錄結構了,

其中xml文件打開後都是二進制的,無法查看。
這時就用到了一個android4me的AXMLPrinter2工具。(請自行網路搜索)
輸入以下命令,將xml文件解析出來
java -jar AXMLPrinter2.jar showtimes_list.xml
此命令是在命令行中查看此showtimes_list.xml
將showtimes_list.xml生成xml文件,則輸入以下命令:
java -jar AXMLPrinter2.jar showtimes_list.xml > h.xml
目前進行到這一步,只能看到xml文件的內容,其工程中的java源文件還是看不到,看目錄結構下有一個classes.dex文件,我們需要將dex文件變為jar文件。
這里用到了另一個工具dex2jar。(自行搜索下載)
在Windows下解壓之後的目錄如下圖所示:

在命令行中,進入到此目錄下:
在Windows下,輸入以下命令:
dex2jar.bat c:classes.dex
運行完之後,在C盤會多一個classes.dex.dex2jar.jar文件,此文件就是我們需要的jar文件。
利用jd-gui,將jar文件反向工程為java代碼。(請自行搜索下載)
它分為Windows、Linux、和max三個版本,這里我下載的是Windows版本的。
解壓之後,雙擊運行exe文件,選擇classes.dex.dex2jar.jar文件,相應的jar文件中的Java文件就被反向工程顯示出來了!

② 怎樣評價羅升陽的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 Framework源代碼

本文講解如何在Eclipse中導入Android源代碼(包括Framework和Application的代碼),然後通過模擬器或真機跟蹤/調試Android的Java代碼,區別於一般基於Android SDK的純應用開發,這里可以跟蹤/調試Framework中的代碼。

一、准備工作

確保機器上已經安裝並配置下列軟體環境:JDK/ Eclipse / Android SDK / ADT

即,機器上已經安裝了Eclipse下Android應用開發所需的環境。如果還未配置,移步《搭建Windows下Android應用開發環境——Eclipse/Android/ADT》。

另外,為了跟蹤調試Android源碼,你還需要有Android源碼,並有源碼的編譯環境,可以是:

  • 虛擬機環境 虛擬機中安裝Linux,Linux下編譯Android源碼。此環境下,如果要在宿主機的Eclipse中調試,還需要把Android的源碼路徑共享出來,宿主機可訪問到;

  • 有單獨的可編譯Android的網路環境 在你的客戶端的機器上訪問伺服器共享出來的Android的源碼路徑;

  • Linux環境下直接通過Eclipse跟蹤調試本機上的Android源碼。

  • 注意:不管哪種工作方式,Android源碼要都是已經編譯過的,且編譯時採用的是Eng模式(vs User mode)。編譯Android Platform和Kernel的過程,可參考《Ubuntu10.10下編譯Android2.2平台》及《Ubuntu10.10下編譯Android2.2內核》。

    二、基本設置

    准備工作完畢之後,現在做一些基本的設置。

    1. 把Android源碼路徑<Android_ROOT>下的developmentideeclipse中的.classpath文件復制到<Android_ROOT>下;如果需要在模擬器中進行調試的話,需要復制三個img(具體方法見http://wenku..com/view/26d9063c87c24028915fc366.html)

    2. 修改Eclipse的設置

    修改eclipse.ini文件,更改下列內容:

    [plain]view plain

  • -Xms40m

  • -Xmx384m

  • 改為:

    [java]view plain

  • -Xms128m

  • -Xmx512m

  • 這里增大最小Java堆大小到128MB,增大最大Java堆大小到512MB。

    三、Eclipse中創建工程

    1. File > New > Java Project

④ android系統源代碼情景分析 需要具備什麼基礎知識

Android系統的源代碼非常龐大和復雜,我們不能貿然進入,否則很容易在裡面迷入方向,進而失去研究它的信心。我們應該在分析它的源代碼之前學習好一些理論知識,下面就介紹一些與Android系統相關的資料。
我們知道,Android系統是基於Linux內核來開發的,在分析它在運行時庫層的源代碼時,我們會經常碰到諸如管道(pipe)、套接字(socket)和虛擬文件系統(VFS)等知識。此外,Android系統還在Linux內核中增加了一些專用的驅動程序,例如用於日誌系統的Logger驅動程序、用於進程間通信的Binder驅動程序和用於輔助內存管理的匿名共享內存Ashmem驅動程序。在分析這些Android專用驅動程序的時候,也會碰到Linux內核中與進程、內存管理相關的數據結構。因此,我們有必要掌握一些Linux內核的基礎知識,下面就介紹四本典經的Linux內核書籍。
1.Linux Kernel Development.
這本書的作者是Robert Love,目前最新的版本是第3版。這本書對Linux內核的設計和實現提供了一個總覽視圖,從概念上對Linux內核的各個子系統的設計目標和實現思路進行了清晰的描述,非常適合初學者閱讀。如果從軟體工程的角度來看,這本書就相當於是Linux內核的概要設計文檔。
2.Understanding the Linux Kernel.
這本書的作者是Daniel P. Bovet和Marco Cesati,目前最新的版本是第3版。這本書對Linux內核的實現提供了更多的細節,詳細地描述了內核開發中用到的重要數據結構、演算法以及編程技巧,非常適合中高級讀者閱讀。如果從軟體工程的角度來看,這本書就相當於是Linux內核的詳細設計文檔。
3.Linux Device Drivers.
這本書的作者是Jonathan Corbet, Alessandro Rubini和Greg Kroah-Hartman,目前最新的版本是第3版。這本書更加註重實際操作,它詳細地講解了Linux內核驅動程序的實現原理和實現方法,讀者可以跟著它來實際地編寫出自己的Linux驅動程序。閱讀了這本書之後,對我們後續去分析Android的專用驅動程序是有非常大的幫助的。
4.Linux內核源代碼情景分析
這本書的作者是毛德操和胡希明,是中國人自己編寫的一本經典的Linux內核書籍。這本書最大的特點是從使用情景出發,對Linux內核的源代碼作了詳細的分析,幫助讀者把枯燥無味的源代碼給理順了。
掌握了Linux內核的基礎知識之後,還不宜馬上就去分析Android系統的源代碼,因為這樣做是漫無目的的,我們應該帶著問題或者目標去分析Android系統的源代碼。要把問題或者目標挖掘出來,最好的方法就莫過於是在Android平台上編寫自己的應用程序了。通過編寫應用程序,我們可以知道Android平台都提供了哪些功能,進而我們就會想去了解這些功能是怎麼實現的,這樣就可以達到帶著問題或者目標去分析Android系統的源代碼了。這里介紹兩個Android應用程序開發教程的書籍:
1.Professional Android 2 Application Development.
2.Google Android SDK開發範例大全.
這兩本書都使用了大量的例子來說明如何使用Android SDK來開發Android應用程序。讀者可以根據實際情況來練習一下,主要掌握Android應用程序四大組件(Activity、Service、Broadcast Receiver和Content Provider)的用法,因為Android系統的整個架構和實現就是為了向開發者提供這四大組件來實現各種各樣的應用程序的。在學習的過程中,如果遇到其它問題,還可以參考官方文檔

⑤ 如何查看Android源碼

當我們在eclipse中開發android程序的時候,往往需要看源代碼(可能是出於好奇,可能是讀源碼習慣),那麼如何查看Android源代碼呢?

比如下面這種情況

假設我們想參看Activity類的源代碼,按著Ctrl鍵,左擊它,現實的結果卻看不到代碼的,提示的信息便是「找不到Activity.class文件」。

此時點擊下面的按鈕,「Change Attached Source…」,選擇android源代碼所在位置,便彈出圖三的對話框。

第一種是選擇工作目錄,即已經存在的android應用程序源代碼。

第二種分兩種方式

(1)選擇External File…按鈕,添加Jar格式文件或者zip格式文件路徑;

(2)選擇External Floder…按鈕,添加文件夾所在路徑。

下面問題就來了,源代碼在哪裡?不能憑空產生阿。

可以通過Android SDK Manager進行源代碼下載;(推薦該種方法),如圖四

勾選Source for Android SDK,進行下載即可。

此外也可通過其他途徑下載,網上有很多共享的資源。

這里選擇第二種方式的(2)方法,選擇源碼所在目錄(即圖四下載源代碼目錄所在路徑),如圖五

點擊「OK」按鈕,此時,Activity文件便能夠查看源代碼了,如圖六。

這樣就大功告成了!!!

⑥ 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應用程序的架構以及運行原理。

熱點內容
為什麼吉利配置那麼高 發布:2024-11-26 04:49:20 瀏覽:430
源碼平台排名 發布:2024-11-26 04:44:49 瀏覽:998
電腦網路連接密碼如何更改 發布:2024-11-26 04:39:20 瀏覽:203
安卓手機如何設置airpro自動彈窗 發布:2024-11-26 04:39:17 瀏覽:585
華為Ul編程 發布:2024-11-26 04:27:15 瀏覽:148
oppor9s軟體加密 發布:2024-11-26 04:27:13 瀏覽:679
連接資料庫的伺服器 發布:2024-11-26 04:17:51 瀏覽:493
java字元串編程 發布:2024-11-26 04:14:39 瀏覽:897
資料庫修復破解 發布:2024-11-26 04:04:52 瀏覽:654
在線解壓百度雲 發布:2024-11-26 03:58:02 瀏覽:273