一個時代即將終結!安卓應用告別 APK 格式

每日快訊
2021
07/05
22:17
電腦報
分享
評論

來源:電腦報

我們知道,Android 應用是以 APK 格式呈現。從接觸安卓系統開始,APK 就一直陪伴著我們,可現在,屬于 APK 的時代恐怕真得要過去了 ……

01

因安卓而被熟知的 APK 格式

APK 全稱 Android application package,意為 "Android 應用程序包 ",是 Android 操作系統使用的一種應用程序包文件格式,用于分發和安裝移動應用及中間件。

一個 Android 應用程序的代碼想要在 Android 設備上運行,必須先進行編譯,然后被打包成為一個被 Android 系統所能識別的文件才可以被運行,而這種能被 Android 系統識別并運行的文件格式便是 "APK"。

APK 文件其實是 zip 格式,但后綴名被修改為 apk,通過 UnZip 解壓后,可以看到 Dex 文件,Dex 是 DalvikVM executes 的簡稱,即 Android Dalvik 執行程序,并非 Java ME 的字節碼而是 Dalvik 字節碼。Android 在運行一個程序時首先需要 UnZip,然后類似 Symbian 那樣直接,但不同于 Windows mobile 中的 PE 文件,程序的保密性和可靠性不是很高,通過 dexdump 命令可以反編譯它,但這種架構符合發展規律,微軟的 WindowsGadgets ( WPF ) 也采用了這種架構方式。

在 Android 平臺中,dalvikvm 的執行文件被打包為 apk 格式,最終運行時加載器會先解壓,然后獲取編譯后的 androidmanifest.xml 文件中的 permission 聲明對安全訪問的限制,要知道仍然存在很多安全限制,但將 apk 文件傳到 /system/app 文件夾下會發現執行是不受限制的。也許我們平時安裝都不會選用這個文件夾,但在 androidrom 中,系統的 apk 文件默認會放入這個文件夾,它們擁有 root 權限。

如今這一格式要被取代了,據 Android Authority 報道,安卓宣布 AAB 格式將取代 Android APK。

02

安卓宣布啟用 AAB 格式

據悉,安卓早在 2018 年推出了 AAB 新格式(AAB 全稱為 "Android App Bundles"),安卓聲稱這種新格式將使應用程序文件更小。

目前在 Google Play 數百萬個應用程序中,已經有數千個應用程序率先跟進了 AAB 格式。

現在安卓宣布 AAB 正式取代 Android APK,從今年 8 月份開始,所有提交到 Google Play 商店的新應用必須采用 AAB 格式。

Android App Bundle 是一種發布格式 —— 精確地說,是一個帶有 .aab 擴展名的 zip 文件。它包含應用支持的所有設備的代碼和資源,例如 DEX 文件、本地代碼庫、清單文件、各種資源文件等。一旦上傳用于發布,Google Play 就會處理 APK 的簽名和生成,這個過程稱為動態交付 ( Dynamic Delivery ) 。動態交付的用途是,根據用戶的設備配置為用戶生成優化的 APK。那么這究竟是怎么做到的?

分拆 APK ( 在 Lollipop 中引入 ) 是從給定的 Android App Bundle 生成的,其行為與單個 APK 無異。一個典型的應用可以獲得一個基礎 APK 和多個配置 APK。而且,如果應用具有動態功能,用戶也可以獲得動態功能 APK 及其配置 APK。基本 APK 包含所有設備配置共有的文件,如清單文件。配置 APK 是為您生成的,每個之中都包含有特定設備配置的相關資源:語言、CPU 架構或屏幕像素密度。因此,用戶將獲得標準的基本 APK ( 與所有其他設備一樣 ) 以及僅包含用戶設備相關資源的配置 APK。

這意味著,如果我使用的是一臺 Android One 手機 ( 小米 A1 ) 而且我設置的主要語言是英文,則這臺手機將獲得基礎 APK 以及支持英文、arm64 CPU 架構和 xhdpi 屏幕分辨率的配置 APK。更棒的是,當設備配置 ( 如語言 ) 發生變化時,Google Play 會檢測到它,并下載該語言的配置 APK。為了進一步降低 APK 大小,我們正計劃推出基于紋理壓縮格式、圖形 API 和新平臺功能的分發方案。

動態功能 APK 包含用戶首次安裝應用時不需要的應用功能代碼和資源。開發者可以把這些用途或功能添加到他們的應用中,Google Play 會按需提供這些動態功能模塊,而不是在安裝時統一添加,從而進一步減少應用下載體積。這也很好理解:我們有必要將那些消耗空間且在安裝時根本用不著的功能,以及那些很少用得著的功能,都打包進動態功能模塊中,這將顯著減少用戶安裝時的文件下載量。

安裝早于 Android Lollipop 版本的設備也可以享受安裝文件體積縮小的福利,但其 APK 中將包含所有語言。

在如今,很顯然構建一個統一的臃腫的 APK 的做法已經過時了。Android App Bundle 代表著 Android 應用交付的未來,接下來我們就可以看到如何構建這樣的一個安裝包。

03

安卓 APP 即將迎來大瘦身

了解 ABB 是什么和它的工作原理以后,人們不禁會好奇 ABB 究竟能讓 APK 程序占用的空間小多少?

目前,國內的開發者將所有資源統一放在單個 APK 中,這樣就會導致 APK 特別龐大,而 AAB 在壓縮 APK 體積方面具有優勢。

而為了縮小體積,部分開發者會有意縮減 APK 中的 ABI 目錄。例如,將 arm64-v8a 的 SO 從 APK 中去除,只留下 armeabi-v7a 的 SO。但這種做法使得 64 位 CPU 的手機無法發揮出其 64 位的運算優勢,降低程序運行速度。

Split APKs 是 Android 5.0 開始提供的多 APK 構建機制,借助 Split APKs 可以將一個 APK 基于 ABI、屏幕密度和 CPU 架構拆分成多個 APK ,這樣可以有效減少單個 APK 體積。當用戶下載應用程序安裝包時,Google Play 會自動識別用戶的語言和 CPU 架構,自動將對應平臺 SO 和資源的 APK 下發給用戶。

這樣說是不是還是有些云里霧里的感覺,其實 Android App Bundle 的早期采用者已經發現,動態交付顯著減小了他們的應用體積。一些開發者甚至可以將他們的 APK 大小減半,而一些知名 app 使用 App Bundle 減小應用體積的數據也有放出來。

除了壓縮體積外,ABB 在 " 防二次打包 " 一類安全性上也有所表現,可安卓這一次改動真是技術更迭的推動又或者為了給用戶更好的使用體驗嗎?

04

想要收攏權限的安卓

.aab 模塊引入了 Split APK 概念。簡單的來講,就是在安裝前,會自動檢測用戶的硬件配置,然后以多個 .apk 的形式安裝應用。可目前,使用 Split APK 的應用程序,用戶是無法直接提取安裝的,都需要借助第三方工具來備份安裝。這意味著,未來用戶在非谷歌應用商店的第三方平臺,下載安裝應用會越來越困難。

雖然 .aab 模塊化特性,極大的提升了開發者的更新維護的便捷性,節省了用戶在安裝應用的時間和存儲空間 。就因為 .aab 的存在,隨著用戶使用設備、所在環境的不同,所安裝的應用可能也不盡相同,應用也就是 " 不完整的 "。

并且,通過官方文檔,我們發現了:使用 app bundle ,開發者就必須加入 Google Play 應用簽名計劃。簽名相當于打上唯一的電子標簽,因此,如果應用被以非正常方式提取分享,就可能導致簽名改變,最終影響應用運行。除非,開發者自行在第三方平臺提供完整的應用安裝包。

只能通過指定應用商店下載、應用 " 不完整 "、分享限制。這些重重限制,Android 用戶都有受到影響。

再往深處想一下,如果說 .aab 應用格式落實,對 Android 用戶而言,只是增加了第三方下載應用的難度。那么對于鴻蒙 OS 而言,這可能是一個巨大的挑戰。

目前鴻蒙 OS 的軟件大多還是以安卓應用為主。所以如果谷歌全面使用 .aab ,肯定會對鴻蒙產生不利條件。

當然,這樣的想法或許是我們多心了,究竟安卓應用這一次改變劍指何處,恐怕還需要時間來驗證。

THE END
廣告、內容合作請點擊這里 尋求合作
快訊
免責聲明:本文系轉載,版權歸原作者所有;旨在傳遞信息,不代表砍柴網的觀點和立場。

相關熱點

據國外媒體報道,蘋果系統狀態追蹤器顯示,包括App Store、iTunes Store、Apple Music和Mac App Store等的在線服務遭遇未知故障,這些旗艦服務連接都處于時斷時續狀態。
業界
國慶中秋假期期間,科技領域重要新聞不斷,以下為新浪科技精心為大家總結的國慶中秋假期要聞回顧。
業界
終于等到了周四,今天的新聞軟硬適中,口感豐富。廢話少說,不妨直接瀏覽昨晚今晨科技、互聯網圈又發生了什么。
業界
在高鐵上點外賣是一種什么樣的體驗?你很快就能知道啦
業界
全球近100個國家遭勒索軟件攻擊 7.5萬臺計算機感染
原創

相關推薦

1
3
女被啪到深处喷水gif动态图