1. 程式人生 > >Android學習之往系統應用中新增framework層的jar包

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之類的了。