關於Android源碼的理解以及如何閱讀源碼


文章最早發布於我的微信公眾號 Android_De_Home 中,歡迎大家掃描下面二維碼關注微信公眾獲取更多知識內容。
本文為sydMobile原創文章,可以隨意轉載,但請務必注明出處!

平時我們在用Android Studio開發項目的時候,如果想要查看源碼,直接 Ctrl + 左鍵 查看對應的源碼,你可能會發現有一些具體源碼看不到,或者部分代碼飄紅。我們就來說說這一部分。

IDE查看源碼出現的問題

我們的Android項目都是需要依賴Android SDK里對應的API Level的android.jar包的,這樣才可以使用Android提供的API,在IntelliJ里面,查看具體類的源碼的時候,如果Android SDK里對應的API Level的Source包有下載的話,IDE會打開對應的Source包,如果沒有下載的話,IDE會把對應的API Level的android.jar包反編譯場成Java代碼,這個規則對於其他的一些第三方的開源項目也是一樣的。但是你最好還是下載Source源碼來查看,有的時候反編譯的Java代碼不可能完全和源代碼一樣,有時候反編譯的代碼的執行邏輯可能完全等價,但是可閱讀性不好,有可能會缺少重要的代碼注釋。

因為Android SDK自帶的Source源碼包很小(你可能會說已經好幾個G了還小啊,后面會講到真正的Android源碼,哪個時候你就知道了),並沒有包括所有的Android Framework的源代碼僅僅是提供給應用開發者參考使用,有一些比較少的系統類的源碼沒有給出,所有你有可能在查看源代碼的時候看到這種情況
RuntimeException(“Stub”)
runtimeexception
查看代碼的時候遇到這種情況,表示實際運行的時候邏輯會到Android ROM(這里Android ROM可以理解為你Android手機的Android系統,里面同樣也包含了你在開發的時候用到的類)里面找相對應的類和方法來代替執行。
此外我們在IDE中查看源代碼的時候,還會經常看到一些類和方法中會出現報紅(也就是找不到)的情況,這種情況在我們查看源代碼的時候是很常見的。
飄紅

這種情況並不是說這些方法或者變量是不存在的,而是這些方法因為出於安全或者某些原因被我們使用的Android SDK隱藏了,這些API不直接暴露給應用層的開發者,這些類和方法在Android源碼編譯完成的android.jar包里面會把這些API隱藏(如果是你自己編譯的Android源碼的話就不會了,后面的文章會講),而我們的Android項目是依賴這個編譯后的android.jar包的,所以我們在查看源碼的時候,IDE就會自動去android.jar里面找對應的API,所以就會出現這種情況了,實際上這種API同樣在ROM中是存在的,有些開發者發現了一些可以修改系統行為的隱藏API,在應用層通過反射的方式強行調用這些API執行系統功能,這種手段也是一種HACK。

上面講了我們在IDE中直接查看源碼有可能會出現的問題,下面就介紹一下怎么查看完整的源碼。

查看完整源碼

當你需要查看完整源碼的時候,需要去AOSP(Android Open Source Project)項目里面找了,(需要科學上網)這個里面放着Android真正的完整源碼,這里所說的完整源碼不僅僅包括Android系統的源碼還包括了一些開發工具比如:aapt、adb等等。
android源碼
選擇自己需要的下先來,如果全部下載下來估計有幾個T吧,不過其實是不需要的,作為應用層的開發,我們看應用層源碼就好了
應用層源碼

介紹查看源碼工具:

  1. Chrome擴展工具
    Android SDK Search
    使用這個插件在谷歌瀏覽器中,打開Android的官網查看API說明的時候,會有個按鈕,通過點擊這個按鈕就可以直接跳轉到AOSP中對應的源碼中
    插件

    注意僅適用於Android開發者官網上查看API文檔,不適用國內的那個鏡像網址。
  2. Source Insight查看完整源碼
    一個強大的查看源碼的軟件,把你在AOSP中下載的源碼導入到這個軟件中就可以快速的查看源碼了
    Source Insight
    破解方法:http://www.cnblogs.com/Napoleon-Wang/p/6706773.html
    具體操作方式:
    http://blog.csdn.net/shulianghan/article/details/50553001
  3. 直接將編譯后源碼導入Android Studio查看
    具體操作步驟:
    http://www.jianshu.com/p/fb16fa459acf
    關於源碼的學習:
    http://www.jianshu.com/p/a4b40a9d1b4f

參考:
http://kaedea.com/2016/02/09/android-about-source-code-how-to-read/




AndroidInterviewQuestions
關注微信公眾號,及時獲取內容更新


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2021 ITdaan.com