Android學習之往系統應用中新增framework層的jar包
Framework中的app為什麼在編譯的時候需要到原始碼中編譯:
因為缺少必要的包(原始碼)----在連線的時候是以class檔案來連線編譯的
以Systemeui為例:
缺少這個包
尋找android原始碼的時候可以找到這個包:
知道framework在編譯的時候會打包自己的java原始檔,於是在打包的out檔案中尋找打包的這個 :其實也是能夠找到的:
還有很多Permission denied(當然這是在別人許可權下的查詢……)
當然最後找到了
裡面的jar包:
開啟jar包裡面是classes的dex檔案:
但是dex檔案暫時不知道怎麼開啟,因此搜尋到此結束。但是大致理解為:
在framework中有一些不需要作為對外介面呼叫的原始碼包,都以dex這種直接在android系統上跑的檔案格式被已經編譯過了,所以在eclipse中直接編譯的時候就缺少必要的包,這些包因為不需要對外開放,已經被打包成了更徹底的dex檔案,只是保證執行,而不對外開放
/****************************/
反駁以上觀點
已經證實了,並不是被編譯成為了所謂的更徹底的dex檔案,而是在sdk中標註了@hide所以在原始碼編譯中是有該api而sdk中沒有。因此可以通過更換sdk 中的api來達到效果。
看組圖吧!
同樣是在尋找 這個類。當然這次完成的專案中就是:
這種情況是為何呢?
程式當然是可以跑起來的,執行也沒有問題。
具體操作步驟:(替換sdk中的android.jar包)
原始碼中編譯的framework層的jar包檔案
Sdk中的android.jar中的android檔案(應該也基本上就是framework層的jar包)
兩個檔案中原始碼中的android資料夾要較於sdk中的大很多。這應該是很多原始碼中的類檔案,及一些jar包被遮蔽或者hide掉了。打上了hide的標籤。這樣應該基本上是可以開發lancher或者setting之類的了。