先說(shuō)說(shuō)google play上架為什么要用AAB格式
相比于 APK,Google 主推的 APP 打包格式 AAB 在很多方面都更為優(yōu)越笙以,主要體現(xiàn)為如下幾點(diǎn):
1.1. 動(dòng)態(tài)分發(fā)
一個(gè) APK 中往往包含各國(guó)的語(yǔ)言資源梨树、ABI票顾、屏幕密度等資源卜范。然而隧土,對(duì)于單個(gè)用戶來(lái)說(shuō),往往只需要這些資源中的部分藕甩。
目前施敢,國(guó)內(nèi)的開發(fā)者將所有資源統(tǒng)一放在單個(gè) APK 中,這樣就會(huì)導(dǎo)致 APK 特別龐大狭莱,而AAB在壓縮APK體積方面具有優(yōu)勢(shì)僵娃。
而為了縮小體積,部分開發(fā)者會(huì)有意縮減 APK 中的 ABI 目錄腋妙。例如默怨,將 arm64-v8a 的 SO 從 APK 中去除,只留下 armeabi-v7a 的 SO骤素。但這種做法使得64位 CPU 的手機(jī)無(wú)法發(fā)揮出其64位的運(yùn)算優(yōu)勢(shì)先壕,降低程序運(yùn)行速度瘩扼。還有語(yǔ)言的問(wèn)題,如果手機(jī)系統(tǒng)語(yǔ)言沒(méi)有設(shè)置支持英語(yǔ),那下載的AAB包也是不包含英語(yǔ)語(yǔ)言包的,這個(gè)時(shí)候添加英語(yǔ)會(huì)出現(xiàn)使用默認(rèn)語(yǔ)言。
Split APKs是 Android 5.0 開始提供的多 APK 構(gòu)建機(jī)制垃僚,借助 Split APKs 可以將一個(gè) APK 基于 ABI集绰、屏幕密度和 CPU 架構(gòu)拆分成多個(gè) APK ,這樣可以有效減少單個(gè) APK 體積谆棺。當(dāng)用戶下載應(yīng)用程序安裝包時(shí)栽燕,Google Play 會(huì)自動(dòng)識(shí)別用戶的語(yǔ)言和 CPU 架構(gòu),自動(dòng)將對(duì)應(yīng)平臺(tái) SO 和資源的 APK 下發(fā)給用戶改淑。
1.2. 動(dòng)態(tài)功能模塊
在 Android Studio 中新增了一個(gè)模塊:動(dòng)態(tài)功能模塊碍岔。通過(guò)該模塊開發(fā)出的功能可在用戶需要時(shí)再進(jìn)行下載,類似于目前在國(guó)內(nèi)被廣泛使用的熱更新機(jī)制朵夏,只不過(guò)熱更新大多是用來(lái)修復(fù)功能性 BUG 的蔼啦,而動(dòng)態(tài)功能模塊更傾向于形成一個(gè)獨(dú)立功能。
用戶在安裝 APK 時(shí)仰猖,只需要下載一個(gè)包含 APP 主要功能的 APK 捏肢,而其他附加功能可在用戶需要時(shí)進(jìn)行動(dòng)態(tài)下載安裝。這樣就進(jìn)一步減小了 APK 的體積饥侵,為用戶改善了 APP 安裝使用體驗(yàn)鸵赫。比如正常使用的時(shí)候是不會(huì)加載直播模塊,在使用直播功能時(shí)才下發(fā)直播相關(guān)代碼和資源。
關(guān)于AAB格式加固
APK格式加固后:在 APP 運(yùn)行時(shí)對(duì) APK 的簽名特征進(jìn)行校驗(yàn)躏升,若運(yùn)行時(shí)的 APK 簽名特征與加固前的 APK 簽名特征不一致辩棒,則 APK 會(huì)直接閃退。
AndroidManifest.xml修改 這里說(shuō)明一下:一些粗心大意的開發(fā)者甚至?xí)?APP 的 debuggable 開關(guān)設(shè)為 "true"膨疏,從而使得 APK 能夠被輕易地調(diào)試
正常的加固如果靠開發(fā)者自己去做,會(huì)牽扯到,簽名加固:資源混淆: DEX 格式和 SO 格式加固,防逆向,防數(shù)據(jù)防泄漏:處理技術(shù)方面的能力,還需要大量的時(shí)間,目前在360,樂(lè)固,愛(ài)加密,網(wǎng)易都推出了加固方案.
但是aab格式的加固目前都是要收費(fèi)的,主要有2家收費(fèi)還不便宜:
網(wǎng)易易盾(非游戲行業(yè) 一個(gè)應(yīng)用端5W一年 不限加固次數(shù))
百度應(yīng)用加固,(14w一年 單次1.4w)
AAB格式包到googleplay應(yīng)用市場(chǎng)上面,在安裝過(guò)程中自動(dòng)簽名,下載到手機(jī)上面根據(jù)手機(jī)設(shè)備下發(fā)不同的模塊,我這邊測(cè)試拿到下發(fā)的apk解壓,發(fā)現(xiàn)并沒(méi)有CPU架構(gòu)的依賴庫(kù)(lib),多語(yǔ)言/屏幕密度是缺少,也就是apk包確實(shí)是不完整的,也就很難反編譯以及注入代碼了,就算反編譯成功也難再次打包成功,至于是否要使用收費(fèi)的方案,就看自己的公司和應(yīng)用規(guī)模了
從谷歌上面下發(fā)的AAB轉(zhuǎn)APK查看簽名有如下提示
cmd命令代碼:jarsigner -certs -verbose -verify xxx.apk
[證書的有效期為2021/11/8 下午4:21至2051/11/8 下午4:21]
[無(wú)效的證書鏈: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target]
sm 24 Thu Jan 01 01:01:02 CST 1981 META-INF/MainAppSDK_release.kotlin_module
>>> 簽名者
X.509, CN=Android, OU=Android, O=Google Inc., L=Mountain View, ST=California, C=US