APK(全稱:Android application package,Android應(yīng)用程序包)是Android操作系統(tǒng)使用的一種應(yīng)用程序包文件格式,用于分發(fā)和安裝移動(dòng)應(yīng)用及中間件。
一個(gè)Android應(yīng)用程序的代碼想要在Android設(shè)備上運(yùn)行,必須先進(jìn)行編譯,然后被打包成為一個(gè)被Android系統(tǒng)所能識(shí)別的文件才可以被運(yùn)行,而這種能被Android系統(tǒng)識(shí)別并運(yùn)行的文件格式便是“APK”。 一個(gè)APK文件內(nèi)包含被編譯的代碼文件(.dex 文件),文件資源(resources), 原生資源文件(assets),證書(certificates),和清單文件(manifest file)APK 文件基于 ZIP 文件格式,它與JAR文件的構(gòu)造方式相似,互聯(lián)網(wǎng)媒體類型是:application/vnd.android.package-archive。APK是Android application package的縮寫,即Android安裝包(apk)。APK是類似SymbianSis或Sisx的文件格式。通過(guò)將APK文件直接傳到Android模擬器或Android手機(jī)中執(zhí)行即可安裝。apk文件和sis一樣,把a(bǔ)ndroidsdk編譯的工程打包成一個(gè)安裝程序文件,格式為apk。 APK文件其實(shí)是zip格式,但后綴名被修改為apk,通過(guò)UnZip解壓后,可以看到Dex文件,Dex是DalvikVM executes的簡(jiǎn)稱,即Android Dalvik執(zhí)行程序,并非Java ME的字節(jié)碼而是Dalvik字節(jié)碼。Android在運(yùn)行一個(gè)程序時(shí)首先需要UnZip,然后類似Symbian那樣直接,但不同于Windows mobile中的PE文件,程序的保密性和可靠性不是很高,通過(guò)dexdump命令可以反編譯它,但這種架構(gòu)符合發(fā)展規(guī)律,微軟的WindowsGadgets(WPF)也采用了這種架構(gòu)方式。在Android平臺(tái)中,dalvikvm的執(zhí)行文件被打包為apk格式,最終運(yùn)行時(shí)加載器會(huì)先解壓,然后獲取編譯后的androidmanifest.xml文件中的permission聲明對(duì)安全訪問(wèn)的限制,要知道仍然存在很多安全限制,但將apk文件傳到/system/app文件夾下會(huì)發(fā)現(xiàn)執(zhí)行是不受限制的。也許我們平時(shí)安裝都不會(huì)選用這個(gè)文件夾,但在androidrom中,系統(tǒng)的apk文件默認(rèn)會(huì)放入這個(gè)文件夾,它們擁有root權(quán)限。