1. 程式人生 > >Android系統中的.apk檔案和dex檔案

Android系統中的.apk檔案和dex檔案

Dex是Dalvik VM executes的全稱,即Android Dalvik執行程式,並非Java ME的位元組碼而是Dalvik位元組碼。Google 在新發布的Android 平臺上使用了自己的Dalvik 虛擬機器來定義,這種虛擬機器執行的並非Java 位元組碼,而是另一種位元組碼:dex 格式的位元組碼。在編譯Java 程式碼之後,通過Android 平臺上的工具可以將Java 位元組碼轉換成Dex 位元組碼。雖然Google 稱Dalvik 是為了移動裝置定做的,但是業界很多人認為這是為了規避向sun 申請Javalicense。這個DalvikVM 針對手機程式程式/CPU 做過最佳化,可以同時執行許多VM 而不會佔用太多Resource。

對於Android DEX檔案進行優化,需要注意的一點是DEX檔案的結構是緊湊的,但是我們還是要想方設法的進行提高程式的執行速度,我們就仍然需要對DEX檔案進行進一步優化。
調整所有欄位的位元組序(LITTLE_ENDIAN)和對齊結構中的沒一個域 驗證DEX檔案中的所有類 對一些特定的類進行優化,對方法裡的操作碼進行優化 。優化後的檔案大小會有所增加,應該是原Android DEX檔案的1-4倍。 優化發生的時機有兩個:對於預置應用,可以在系統編譯後,生成優化檔案,以ODEX結尾。
這樣在釋出時除APK檔案(不包含DEX)以外,還有一個相應的Android DEX檔案;對於非預置應用,包含在APK檔案裡的DEX檔案會在執行時被優化,優化後的檔案將被儲存在快取中。

每一個Android應用都執行在一個Dalvik虛擬機器例項裡,而每一個虛擬機器例項都是一個獨立的程序空間。虛擬機器的執行緒機制,記憶體分配和管理,Mutex等等都是依賴底層作業系統而實現的。
所有Android應用的執行緒都對應一個Linux執行緒,虛擬機器因而可以更多的依賴作業系統的執行緒排程和管理機制。
不同的應用在不同的程序空間裡執行,加之對不同來源的應用都使用不同的Linux使用者來執行,可以最大程度的保護應用的安全和獨立執行。
Zygote是一個虛擬機器程序,同時也是一個虛擬機器例項的孵化器,每當系統要求執行一個 Android應用程式,Zygote就會FORK出一個子程序來執行該應用程式。這樣做的好處顯而易見:Zygote程序是在系統啟動時產生的,它會完成虛擬機器的初始化,庫的載入,預置類庫的載入和初始化等等操作,而在系統需要一個新的虛擬機器例項時。

Zygote通過複製自身,最快速的提供個系統。另外,對於一些只讀的系統庫,所有虛擬機器例項都和Zygote共享一塊記憶體區域,大大節省了記憶體開銷。Android應用開發和Dalvik虛擬機器Android應用所使用的程式語言是Java語言,和Java SE一樣,編譯時使用Sun JDK將Java源程式程式設計成標準的Java位元組碼檔案(.class檔案)。
而後通過工具軟體DX把所有的位元組碼檔案轉成Android DEX檔案(classes.dex)。最後使用Android打包工具(aapt)將DEX檔案,資原始檔以及AndroidManifest.xml檔案(二進位制格式)組合成一個應用程式包(APK)。應用程式包可以被髮布到手機上執行

相關推薦

Android系統的.apk檔案dex檔案

Dex是Dalvik VM executes的全稱,即Android Dalvik執行程式,並非Java ME的位元組碼而是Dalvik位元組碼。Google 在新發布的Android 平臺上使用了自己的Dalvik 虛擬機器來定義,這種虛擬機器執行的並非Java 位元組碼,而是另一種位元組碼:dex 格式

如何驗證Android系統APK證書鏈的有效性

瀏覽器通過https訪問指定網址時, 需要驗證網站的證書, 瀏覽器中通常內建常用的CA(Certificate Authority)根證書,而網站的證書一般都是由根CA或者子CA簽名的.如果網站沒有這些知名CA簽名, 則需要將網站自己的根證書匯入瀏覽器才能進行h

class檔案dex檔案

Class檔案 1、什麼是class檔案 能夠被JVM識別,載入並執行的檔案格式。 2、class檔案的生成 3、如何生成一個class檔案(必須配置好java環境變數) 通過IDE自定幫我們build 手動通過jav

Android系統載入Apk檔案的時機流程分析(1)--Android 4.4.4 r1的原始碼

Android系統在啟動時安裝應用程式的過程,這些應用程式安裝好之後,還需要有一個Home應用程式來負責把它們在桌面上展示出來,在Android系統中,這個預設的Home應用程式就是Launcher了。Android系統的Home應用程式Launcher是由Activit

Android的ClassLoader與dex檔案加密實現分析

Android中的ClassLoader BaseDexClassLoader Dex類載入器的基類,包含Dex類載入器之間通用功能的實現。 DexClassLoader A class loader that loads classes from .jar

Android獲取.Gradle檔案的值Manifests檔案的值

專案中有登入頁面,但平時除錯的時候每次都輸入使用者名稱密碼來登入太麻煩,寫成固定值釋出的時候又要重新替換和註釋。所以就想從不同版本獲得資訊然後程式碼中控制。 在Android專案檔案中的build.gradle中,在android標籤下的defaultConf

android反編譯apk後,java檔案出現的一些類似亂碼的問題

概述 java class  反編譯之後,偶爾回碰到一些不正常的程式碼 例如: label0 :_L1 MISSING_BLOCK_LABEL_30 JVM INSTR ret 7 JVM INSTR tableswitch 1 3: default 269、 JVM I

Android 系統直接呼叫 SO檔案(包含System.loadLibrary載入so的路徑解釋)

Android虛擬機器不能直接呼叫底層裝置,如果要對底層裝置進行呼叫,就需要用到so使用 C語言或C++編寫完成,利用NDK進行編譯,直接執行在Linux核心中,按jni呼叫 so時,基本型別可以直接互動。  在 apk裡打包進.so檔案的方法有兩種,一 是在 Androi

Android專案使用Eclipse匯出jar檔案

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

vs的slnsuo檔案是什麼

.sln 和 .suo都是是解決方案檔案。 .sln(Visual Studio.Solution):它通過為環境提供對專案、專案項和解決方案項在磁碟上位置的引用,可將它們組織到解決方案中。 包含了較為通用的資訊,包括解決方案所包含專案的列表,解決方案內任何項的位置以及解決方案的生成配置

Android系統main.mk關於RCSSCCS的解釋

# this turns off the RCS / SCCS implicit rules of GNU Make % : RCS/%,v % : RCS/% % : %,v % : s.% % : S

javaio建立檔案讀取檔案

簡單瞭解IO流:https://www.cnblogs.com/weibanggang/p/10034325.html package com.wbg.iodemo1128; import java.io.*; public class OutputStreamDemo { public

eclipse的.yml.properties檔案沒有綠色葉子圖示

0、首先確認正確安裝了STS外掛 要在eclipse使用spring boot建立專案,必須先安裝STS(Spring Tool Suite (STS) for Eclipse),如果網速給力的話可以

python file模組的文字檔案二進位制檔案以及字串byte的理解

大前提:文字檔案和二進位制檔案都是以二進位制的方式存放到硬碟中的 看圖先~ 1. Python file讀寫加不加b w 開啟一個檔案只用於寫入。如果該檔案已存在則開啟檔案,並從開頭開始編輯,即原有內容會被刪除。如果該檔案不存在,建立新檔案。 wb

在Ubuntu/ROS系統執行多個Python檔案的方法

執行多個Python檔案可以採用,編寫一個launch檔案來實現。launch檔案的新建後,需要儲存在這多個Python檔案所對應的package中,是這個package檔案的主檔案下,新建一個laun

Arch,Manjaro系統Atom不能刪除檔案.提示gvfs-trash...

在archlinux或者是manjaro中,atom刪除檔案提示 gvfs_trash not install ? 解決方案: #在環境變數中,增加 export ELECTRON_TRASH=gio 重啟Atom Unable to delete files

Linux系統查詢、刪除重複檔案,釋放磁碟空間。

在Linux系作業系統中查詢並刪除重複檔案的方法的確有很多,不過這裡介紹的是一款非常簡單實用的軟體FSlint。FSlint是一個重複檔案查詢工具,可以使用它來清除不必要的重複檔案,筆者經常使用它來釋放Linux系統中的磁碟空間。 FSlint同時具有GUI和CLI模式。因

嵌入式 Jlinkflash.csv*.jflash檔案分析

轉自:點選開啟 本文是對《使用Jlink下載程式到Nor Flash》一文的補充和修正(尤其修正init sequence的內容)。 分析這兩個檔案的目的:是為了以後使用新的MCU和Flash時自己製作project檔案。當然可以在圖形介面配置這兩個檔案,但我還是習慣分析

CentOS環境變數配置檔案

什麼是環境變數 bash shell用一個叫做 環境變數(environment variable) 的特性來儲存有關shell會話和工作環境的資訊。即允許在記憶體中儲存資料,使得在程式或shell中執行的指令碼能夠訪問它們。 在bash shell中,環境變數分為兩類: 全域性變數 區域性變數 全域性環

EBSodf檔案xdf檔案解釋

原地址:https://blog.csdn.net/cymm_liu/article/details/47947991 1、ODF odf(Object Descriptor File),裡邊含有資料庫物件的描述,用於建立資料庫表,檢視,索引等等。 除了打patch可以打odf檔案,我們