最近在學習Android開發的知識,將學習過程當中的心路感想記錄下來,既是對本身的學習總結,也但願能給後人提供一些幫助。整個系列會盡可能穿插對比iOS開發中相關的知識和概念,包括控件、佈局、思想等。java
上文提到了dex文件,dex是和設備架構無關的字節碼.在Android程序運行時,DVM實時的將一部分Dalvik字節碼翻譯成機器碼。架構
DVM是Dalvik Virtual Machine(Android虛擬機)的縮寫,基於JVM(Java 虛擬機)的理念,同時進行了優化。JVM是基於棧的結構,DVM是基於寄存器的結構,速度更快。dex文件將多個class文件中公有的部分統一存放,去除了冗餘信息。工具
做爲iOS開發人員,提到runtime,必然聯想到objc的runtime。對比二者,objc的語法在編譯期就被轉化爲objc_msgSend等c語言的代碼,編譯成可直接運行的二進制碼,但這個二進制碼是平臺依賴的。而虛擬機的理念是平臺無關,因此編譯器生成的只是中間代碼,在不一樣的平臺,這個中間代碼被翻譯成不一樣的代碼。那麼,問題來了,Android程序自己就是運行在Android這個特定的平臺,理論上徹底能夠在編譯期間就編譯成可直接運行的二進制代碼,無需在運行時邊運行邊翻譯。帶着這個疑問查閱了一些資料,發現確實是有朝着這個方向發展的趨勢。佈局
從Android 4.4開始,引入了ART運行時機制,ART使用AOT(Ahead of time )編譯,在應用的安裝期間,就將DEX字節碼翻譯成機器碼並存儲在設備的存儲器上。因爲ART執行的是native code,代碼執行速度和資源佔用都更有優點。學習
這一篇簡單介紹了apk編譯打包的流程及Android虛擬機的介紹,不足之處歡迎評論指出。下一篇將進入控件和界面佈局篇。開發工具