背景
在查看Android API源碼時,Android.jar內(nèi)部有大量@hide注解的代碼。Android隱藏API是因為不能保證這些API還存在新系統(tǒng)版本,所以盡量少用隱藏API!因此,Android.jar并不完整,要么實現(xiàn)為空要么類缺失,不利于源碼的研究。谷歌百度之后,尋覓了三種方法以獲取源碼。
關于@hide注解
簡單來說編程工具(AndroidStudio等)是引用SDK中的android.jar,這個包里沒有hide和internal相關的類、屬性和方法的,它是個刪減版。當app開發(fā)完成裝到手機上或虛擬里運行時,引用的卻是framework.jar,這個包是完整版。舉個形象的例子,我們在開發(fā)app時,編譯環(huán)境只給了我們一個碗讓我們?nèi)ナ埖菦]有筷子,只有當app運行時,運行環(huán)境才會給我們一雙筷子,這時我們才能吃飯。
也就是說hide只作用于編譯期,在運行期它是沒有作用的,所以才能通過反謝去調(diào)用hide方法。
獲取源碼
方法一 在SDK Manager中下載源碼,一般存放于SDK根目錄下 \sdk\sources\android-xx。但經(jīng)對比, 這種方式獲取的源碼依然有大部分的缺失。
方法二 在萬能的GitHub已有人去除Android.jar中@hide注解, 可反編譯使用。
地址: https://github.com/anggrayudi/android-hidden-api
eg: 可替換SDK/platforms/android-版本/Android.jar。直接使用隱藏API,不需要反射,Android.jar并不會打包到APK,所以去除@hide的Android.jar,只是欺騙IDE/編譯器,方便程序員查看使用!
方法三 在線查閱完整源碼
安卓社區(qū) https://www.androidos.net.cn/android/8.0.0_r4/xref
androidxref http://androidxref.com/8.0.0_r4/xref/
方法四 官方下載源碼(十分龐大)
清華鏡像 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
官方 https://source.android.google.cn/setup/develop
參考文章:
http://www.itdecent.cn/p/c5d061d16b30
https://blog.csdn.net/lxhpkm01/article/details/55506968