在面試中,大公司會(huì)問(wèn)你.....(吃飯了嗎?)咳咳~
APK打包流程全過(guò)程?
APK簽名在實(shí)際業(yè)務(wù)中能處理什么?
APK加固原理是如何實(shí)現(xiàn)的,怎么保證安全?
APK簽名V1,V2,V3的區(qū)別于原理,有什么漏洞?
這里只講解APK打包流程全過(guò)程。
現(xiàn)在2023年了,一般都是用Android studio來(lái)設(shè)計(jì)android,而最直接的安卓APK打包方式則是使用Android Studio集成直接生成apk,所以本文就介紹以AS集成生成APK的方式來(lái)講解。
首先先介紹以下編譯的不同,在AS里面有很多的這種編譯的選項(xiàng),但是這些選項(xiàng)有什么區(qū)別呢?
Sync Project with gradle files:對(duì)gradle文件之后,或刷新gradle配置時(shí)使用。
Make project:只是對(duì)項(xiàng)目中新產(chǎn)生或修改過(guò)的文件進(jìn)行一次編譯,已經(jīng)編譯過(guò)了的就不會(huì)編譯了,耗時(shí)相對(duì)較短。
Clean Project :刪除build目錄下的所有文件,并對(duì)項(xiàng)目的大部分文件進(jìn)行重新編譯,時(shí)間相對(duì)于Rebuild Project短點(diǎn)。
Rebuild Project :包含了Clean的操作,并對(duì)整個(gè)項(xiàng)目進(jìn)行了重新編譯(包括NDK和資源文件),因此耗時(shí)相對(duì)較長(zhǎng)。
Invalidate Cache/Restart AndroidStudio:自動(dòng)生成的項(xiàng)目緩存異常時(shí),點(diǎn)擊可清理項(xiàng)目緩存并重啟AndroidStudio,重啟后即可正常生成項(xiàng)目文件。
Build APK:前面4個(gè)選項(xiàng)都是編譯,沒(méi)有生成apk文件,如果想生成apk,需要點(diǎn)擊Build APK。
Generate Signed APK:生成有簽名的apk。
————————————————
版權(quán)聲明:本文為CSDN博主「carter_yu」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。
原文鏈接: https://blog.csdn.net/carter_yu/article/details/105641951
我們常規(guī)的打包就是點(diǎn)擊下方這個(gè)圖,點(diǎn)擊它。

此時(shí)此刻在我們Project面板的app\bulid\outputs\apk\debug中會(huì)生成一個(gè)對(duì)應(yīng)的apk的包,這個(gè)過(guò)程APK打包的這個(gè)能力不是AS軟件提供的,而是AS的SDK提供的(就是當(dāng)初你安裝AS的時(shí)候安裝的SDK)。
而SDK里面有一個(gè)build-tools文件夾。

點(diǎn)開(kāi)發(fā)現(xiàn)有好幾個(gè)版本。

隨便點(diǎn)擊一個(gè)33版本的。

build-tools里面有很多我們打包會(huì)用到的工具,里面的工具可以完成具體的功能,例如aapt,aidl等等。
AS的Gradle就是調(diào)度我們這些工具的,以前是用Eclipse來(lái)調(diào)度這些工具的?,F(xiàn)在都用AS啦,要學(xué)會(huì)跟著新時(shí)代的腳步,不過(guò)以前的技術(shù)還是要了解一下。

我們從上往下看,寫(xiě)代碼期間會(huì)自動(dòng)調(diào)用aapt和aidl工具。
aapt:每當(dāng)我們寫(xiě)一個(gè)XML文件,aapt.exe就會(huì)被AS自動(dòng)調(diào)度,生成一個(gè)R.java文件。而被打包后會(huì)生成一個(gè).arsc文件,也就是我們的res目錄被打包了,但是assets和lib文件夾下的這些資源aapt就不會(huì)進(jìn)行處理,默認(rèn)過(guò)濾。
aidl:進(jìn)程間的通信。aidl.exe就會(huì)被AS自動(dòng)調(diào)度,生成一個(gè)java Interface文件。
Application Source code:而最上方中間的是我們寫(xiě)的源文件代碼。

java compiler:Gradle通過(guò)調(diào)用javac命令,把三個(gè).java文件全部轉(zhuǎn)化為.class文件。
此時(shí)此刻在我們Project面板的app\bulid\intermediates\javac\debug\classes\com底下會(huì)生成一系列的.class文件。

類(lèi)加載機(jī)制
JVM加載類(lèi)文件的話,單個(gè)文件加載會(huì)觸發(fā)N次IO流
幾百個(gè)類(lèi)會(huì)觸發(fā)更多次IO流。
所以安卓對(duì)類(lèi)加載進(jìn)行了一定的優(yōu)化,將.class轉(zhuǎn)為.dex文件,體積更小,本質(zhì)上還是字節(jié)碼。
而.class文件屬于jar包。
而我們安卓虛擬機(jī)又不同于jvm,還有一些安卓私有的東西,所以要轉(zhuǎn)化為.dex文件。
Gradle調(diào)用到dx.bat工具,把.class文件轉(zhuǎn)化為.dex文件。
第三方j(luò)ar包也是編譯后的.class文件,也要被轉(zhuǎn)化為.dex文件。
此時(shí)此刻在我們Project面板的app\bulid\intermediates\dex\debug下會(huì)生成.dex文件。


Other Resources:比如assets,lib和res一些圖片和XML文件等等,這些資源就不會(huì)經(jīng)過(guò)相關(guān)工具處理,直接放入apk包中。
Compiled Resources:生成一個(gè)resoueces.arsc文件。
apk builder:調(diào)用libbcc.dll動(dòng)態(tài)鏈接庫(kù),打包成APK。
比如:把.dex文件
res文件
清單文件
META-INF源信息文件
resources.arsc文件
新建文件夾,按順序往里面放,然后右鍵壓縮,后綴名zip改成apk。
本質(zhì)上就是這樣,用zip壓縮方案進(jìn)行io操作。

簽名:Gradle調(diào)用apksigner.bat工具,就從沒(méi)簽名的apk變成有簽名的apk,apk里面就會(huì)多出一個(gè)META-INF源信息文件,沒(méi)簽名就沒(méi)有。

優(yōu)化4K對(duì)齊:Gradle調(diào)用zipalign.exe工具(磁盤(pán)操作)關(guān)于操作系統(tǒng),對(duì)內(nèi)存再次進(jìn)行優(yōu)化,具體這個(gè)我也不太會(huì)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-434153.html

打包是由SDK提供,AS打包就是調(diào)用這些工具全自動(dòng)化完成。所以你也可以自己打包,但是會(huì)出現(xiàn)安全問(wèn)題,所以還是老老實(shí)實(shí)用AS打包吧(大佬可以忽略這句話)文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-434153.html
到了這里,關(guān)于【Android篇】APK打包流程淺析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!