如何穿越到android底層

對於android開發,實際上大部分工做都是在應用層,但爲了體現"技術含量",以及"知其因此然",以便在遇到問題是不至於一籌莫展。所以有必要了解底層的工做機制。java

因爲android是開源的系統,所以學習其內部的工做機制是很是容易的,目前也有一些關於android源碼分析的書籍。linux

我一直認爲,應用層的開發和底層沒什麼太大的關係,不過有一次由於應用權限的問題,也算是對android framework層有一些瞭解了,藉助一本源代碼分析的書籍瞭解android的工做原理並無想象中那麼困難。android

與其餘地方不一樣是本人使用了不爲人知的代碼注入技術(並不是依賴注入),對於具備root權限的android設備,只須要往系統進程中注入一個.so文件,再用這個.so文件去獲取jvm執行環境,就能夠加載java代碼,這樣就將本身的java代碼注入到系統進程中。windows

注入java代碼之後就能夠在framework層執行操做了,所以咱們成功的從應用層穿越到android底層。微信

固然若是要在framework層執行本身編寫的代碼,直接替換系統文件也是能夠的。一種方式是下載安卓源代碼,構建編譯環境,還有一種方式是對系統中的jar文件進行反編譯在編譯回去這也是可行的。參考(未測試):http://dss16694.iteye.com/blog/1436466app

代碼注入參考:http://blog.csdn.net/jiangwei0910410003/article/details/40949475jvm

固然替換系統文件和代碼注入都須要有root權限,最新的android默認啓用了SELinux,獲取root權限可能會遇到麻煩,所以最好是使用4.3如下的系統來研究。函數

android底層是基於linux的,系統開機後,首先運行的是linux,android的運行環境從app_process的可執行文件開始運行,由init.rc指定文件路徑以及啓動參數。app_process中啓動了jvm,隨後就進入了java的世界,java的程序都大部分都放在/system/framework文件夾下,與普通的jar包不一樣,這裏的java是基於dalvik。反編譯能夠獲得普通的jar文件,放在項目中能夠做爲lib使用,經過jar的函數調用系統的功能。工具

若是你想彈窗體出來玩玩能夠參考這裏。
http://blog.csdn.net/innost/article/details/47660193
(這可不是通常的窗體)源碼分析

dalvik虛擬機的內容,以及最新的art的內容請自行百度或谷歌進行了解。

關於android的系統的加載過程,以及各類系統服務相關的內容的分析,請參考安卓源碼分析的書籍。

從android系統的結構能夠看出,android的不少代碼是用java實現的,而java是能夠跨平臺的,理論上只要讓啓動程序app_process以及相關的可執行文件能在windows等系統上運行,android就能夠直接運行於windows等其餘的操做系統上。

實際上這樣的移植已經有人實現了,Chrome ARC上就能夠,雖然不少軟件還運行不起來,目前看到的有WindowsAndroid也是經過移植的方式來運行android而不是經過虛擬機,可能還有其餘的。

不過我尚未看到開源的項目,或者已經有這樣的開源項目我尚未發現,若是有誰知道告訴我一下哈。

另一個有意思的事件就是能夠將android的UI,單獨拿出來,這樣就能夠用開發安卓應用的方式開發桌面應用了,android的UI有現成的開發工具和衆多的開發人員。java中的swt以及swing都已經快要被遺忘了。

好了,先就說這麼多了,更多內容請關注個人微信公衆號:zhaojieTec

相關文章
相關標籤/搜索