apk即Android安裝包,通過將APK文件直接傳到Android模擬器或Android手機中執(zhí)行即可安裝。安卓Android的軟件安裝包以.apk為文件擴展名,其文件格式是標(biāo)準(zhǔn)的.zip文件,可以通過WinZIP、winrar等壓縮文件工具直接打開,或是在.apk文件名上添加.zip后綴,即可查看封裝在其中的具體文件內(nèi)容,包括程序、圖片、配置文件等。apk文件和sis一樣,把android sdk編譯的工程打包成一個安裝程序文件,格式為apk。 APK文件其實是zip格式,但后綴名被修改為apk,通過UnZip解壓后,可以看到Dex文件,Dex是Dalvik VM executes的全稱,即Android Dalvik執(zhí)行程序,并非Java ME的字節(jié)碼而是Dalvik字節(jié)碼。Android在運行一個程序時首先需要UnZip,然后類似Symbian那樣直接,和Windows Mobile中的PE文件有區(qū)別。
創(chuàng)新互聯(lián)建站溝通電話:028-86922220,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計及定制高端網(wǎng)站建設(shè)服務(wù),創(chuàng)新互聯(lián)建站網(wǎng)頁制作領(lǐng)域10多年,包括人造霧等多個領(lǐng)域擁有多年設(shè)計經(jīng)驗,選擇創(chuàng)新互聯(lián)建站,為企業(yè)錦上添花。
上面 主要分析到APK的copy過程,這里我們開始分析APK的加載過程。直接看之前流程進(jìn)行到下一步的 processPendingInstall() 方法:
installPackagesLI() 可以支持單包和多包加載,加載主要分為4個階段:
執(zhí)行完2-2的 scanPackageTrackLI() 之后Pms的兩大核心數(shù)據(jù)結(jié)構(gòu)都已經(jīng)準(zhǔn)備好了,一個是代表掃描結(jié)果的final ArrayMapString, PackageParser.Package mPackages = new ArrayMap();中的PackageParser.Package,另外一個是mSettings.mPackages的PackageSetting 數(shù)據(jù)結(jié)構(gòu),這兩個結(jié)構(gòu)PackageParser.Package代表掃描結(jié)果,為靜態(tài)數(shù)據(jù),掃描完成后就不會發(fā)生變化。PackageSetting用于存儲安裝應(yīng)用的動態(tài)數(shù)據(jù),如權(quán)限授予情況等。PackageParser.Package由于是靜態(tài)數(shù)據(jù),掃描apk就可以獲取。PackageSetting生成之后會被記錄到文件中,以后每次系統(tǒng)啟動都會重新加載。
apk 是Android Package的簡寫, 在平時的開發(fā)過程中,通過點擊 Run app 按鈕 或者 在命令行中輸入
這樣Android Studio就會啟動構(gòu)建流程,最終輸出一個我們想要的APK。
直達(dá)官網(wǎng)介紹
對于小白來說,上面一張圖已經(jīng)可以解釋apk的構(gòu)建過程了,不過對于Andoid開發(fā)者而言還需要了解一些更詳細(xì)的構(gòu)建過程。
詳細(xì)的對應(yīng)步驟 和 使用工具如下:
資源文件(res文件夾下的文件)通過 AAPT(Android Asset Packaging Tool)打包生成R.java類(資源索引表)、.arsc資源文件 和res文件。
resources.arsc 是一個App的資源索引表,通過R.java 文件 和 resources.arsc 可以定位到資源的內(nèi)存地址,resources.arsc文件的作用是通過一樣的ID,根據(jù)不同的配置索引到最佳的資源顯示在UI中。
AIDL (Android Interface Definition Language), 是Android接口定義語言,是Android提供的IPC (Inter Process Communication,進(jìn)程間通信)的一種獨特實現(xiàn)。
如果有aidl文件,這個階段會生成對應(yīng)的Java接口文件。
R.java文件、工程源碼文件、aidl.java文件, 在這一步通過javac生成.class文件。
源碼.class文件和第三方j(luò)ar或者library通過dx工具打包成dex文件
Android系統(tǒng)的Dalvik虛擬機的可執(zhí)行文件為DEX格式,所以這里會將上一步中生成的.class文件 和 引用的第三方j(luò)ar等過程中的.class 一起通過dx工具打包成dex文件
apkbuilder工具會將所有沒有編譯的資源、.arsc資源、.dex文件打包到一個完成apk文件中
tips:
apksigner工具會對未簽名的apk驗證簽名。得到一個簽名后的apk(signed.apk)
apksigner 是google 退出的V2簽名方式
Jarsigner 是之前一直使用的V1簽名方式
可以通過在命令行中輸入apksigner --help來獲取詳情信息,如果沒有特殊需求,使用下面命令即可完成簽名
release mode 下使用 aipalign進(jìn)行align,即對簽名后的apk進(jìn)行對齊處理
所謂對齊,主要過程是將APK包中所有的資源文件距離文件起始偏移為4字節(jié)整數(shù)倍,這樣通過內(nèi)存映射訪問apk文件時的速度會更快。對齊的作用主要是為了減少運行時內(nèi)存的使用。
zipalign是一個android平臺上整理APK文件的工具,它對apk中未壓縮的數(shù)據(jù)進(jìn)行4字節(jié)對齊,對齊后就可以使用mmap函數(shù)讀取文件,可以像讀取內(nèi)存一樣對普通文件進(jìn)行操作。如果沒有4字節(jié)對齊,就必須顯式的讀取,這樣比較緩慢并且會耗費額外的內(nèi)存。
參考文章:
Android-Studio配置構(gòu)建
淺談Android打包流程
apk打包流程
END!
APK文件的組成部分及apk打包流程是Android開發(fā)中的基礎(chǔ)知識點,做一個簡單的記錄。
apk文件是Android應(yīng)用包文件格式,其本質(zhì)是一個壓縮文件。將apk文件拖動到Android Studio中即可查看里面的內(nèi)容,如下圖:
從上圖中可以看到apk包里的幾個重要組成部分:
打包流程的經(jīng)典流程圖如下:
其中七個橢圓形內(nèi)容對應(yīng)了打包流程中的七個重要步驟,也對應(yīng)著打包中的七個重要工具,具體如下:
對上面七個重要的打包流程進(jìn)一步說明。
aapt打包資源文件,生成R.java文件,resources.arsc等文件。
aapt在打包資源文件之前會檢測 AndroidManifest.xml 文件的合法性,對res目錄下的資源目錄進(jìn)行掃描合法性,因此資源命名有問題時會在編譯階段就會直接報錯。
需要注意的是xml文件會被編譯為二進(jìn)制的,因此我們并不能直接打開apk包中的xml文件。
AIDL是Android接口定義語言,是Android進(jìn)程間通訊的一種實現(xiàn)方式。
此步驟中會對aidl文件進(jìn)行處理,生成java文件。
通過javaCompiler對java文件進(jìn)行編譯,生成class文件。
dx工具將class文件轉(zhuǎn)變?yōu)锳ndroid系統(tǒng)Dalvik虛擬機可執(zhí)行的Dex文件。
將classes.dex,res文件夾等所有文件打包成apk文件。
生成APK包之后還需要進(jìn)行簽名處理,Release簽名需要我們自己去進(jìn)行配置。
常用的簽名方式有兩種:jarsigner和apksigner。
Zipalign是Android平臺上APK文件對齊的整理工具,能夠?qū)PK中未壓縮的數(shù)據(jù)進(jìn)行4字節(jié)對齊。
需要注意的是根據(jù)采用簽名方式的不同,對齊處理的先后順序有所區(qū)別。
APK打包流程備忘。
網(wǎng)站名稱:androidapk,androidapk sy soyoung
網(wǎng)站網(wǎng)址:http://jinyejixie.com/article20/dsdjgjo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、營銷型網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、App設(shè)計、標(biāo)簽優(yōu)化、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)