[轉]如何閱讀android framework源碼


 

但如果想深入的了解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自動補全非常給力.
  • 巨人的肩膀
    • AOSP項目官方:
      • 這個一定要先讀. 項目介紹, 代碼下載, 環境搭建, 刷機方法, Eclipse配置都在這里. 這是一切的基礎.
    • Android官方Training:
      • 這個其實是給App開發者看的. 但是里面也有不少關於系統機制的介紹, 值得細讀.
    • 老羅的Android之旅:
      • 此老羅非彼老羅. 羅升陽老師的博客非常有營養, 基本可以作為指引你開始閱讀AOSP源碼的教程. 你可以按照博客的時間順序一篇篇挑需要的看.但這個系列的博客有些問題:
        • 早期的博客是基於舊版本的Android;
        • 大量的代碼流程追蹤. 讀文章時你一定要清楚你在看的東西在整個系統處於什么樣的位置.
    • Innost的專欄:
      • 鄧凡平老師也是為Android大牛, 博客同樣很有營養. 但是不像羅升陽老師的那么系統. 更多的是一些技術點的深入探討.
    • Android Issues:
      • Android官方Issue列表. 我在開發過程中發現過一些奇怪的bug, 最后發現這里基本都有記錄. 當然你可以提一些新的, 有沒有人改就是另外一回事了.
    • Google:
      • 一定要能流暢的使用這個工具. 大量的相關知識是沒有人系統的總結的, 你需要自己搞定.
  • 其它
    • 代碼組織
      • 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
    • 想到了再補充.

 

著作權歸作者所有。 商業轉載請聯系作者獲得授權,非商業轉載請注明出處。 作者:王宇龍 鏈接:http://www.zhihu.com/question/19759722/answer/29213925 來源:知乎


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM