但如果想深入的了解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項目官方: https://source.android.com/source/index.html
- 這個一定要先讀. 項目介紹, 代碼下載, 環境搭建, 刷機方法, Eclipse配置都在這里. 這是一切的基礎.
- Android官方Training: https://developer.android.com/training/index.html
- 這個其實是給App開發者看的. 但是里面也有不少關於系統機制的介紹, 值得細讀.
- 老羅的Android之旅: http://blog.csdn.net/luoshengyang
- 此老羅非彼老羅. 羅升陽老師的博客非常有營養, 基本可以作為指引你開始閱讀AOSP源碼的教程. 你可以按照博客的時間順序一篇篇挑需要的看.但這個系列的博客有些問題:
- 早期的博客是基於舊版本的Android;
- 大量的代碼流程追蹤. 讀文章時你一定要清楚你在看的東西在整個系統處於什么樣的位置.
- Innost的專欄: http://blog.csdn.net/innost
- 鄧凡平老師也是為Android大牛, 博客同樣很有營養. 但是不像羅升陽老師的那么系統. 更多的是一些技術點的深入探討.
- Android Issues: http://code.google.com/p/android/issues/list
- Android官方Issue列表. 我在開發過程中發現過一些奇怪的bug, 最后發現這里基本都有記錄. 當然你可以提一些新的, 有沒有人改就是另外一回事了.
- Google: https://www.google.com
- 一定要能流暢的使用這個工具. 大量的相關知識是沒有人系統的總結的, 你需要自己搞定.
- 其它
- 代碼組織
- 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.xda-developers.com/
- 這里有最新資訊和最有趣的論壇.
- 想到了再補充.
著作權歸作者所有。 商業轉載請聯系作者獲得授權,非商業轉載請注明出處。 作者:王宇龍 鏈接:http://www.zhihu.com/question/19759722/answer/29213925 來源:知乎