我们知道,Android 应用是以 APK 格式呈现。从接触安卓系统开始,APK 就一直陪伴着我们,可现在,属于 APK 的时代恐怕真得要过去了 ……
01
因安卓而被熟知的 APK 格式
APK 全称 Android application package,意为 "Android 应用程序包 ",是 Android 操作系统使用的一种应用程序包文件格式,用于分发和安装移动应用及中间件。
一个 Android 应用程序的代码想要在 Android 设备上运行,必须先进行编译,然后被打包成为一个被 Android 系统所能识别的文件才可以被运行,而这种能被 Android 系统识别并运行的文件格式便是 "APK"。
在 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 One 手机 ( 小米 A1 ) 而且我设置的主要语言是英文,则这台手机将获得基础 APK 以及支持英文、arm64 CPU 架构和 xhdpi 屏幕分辨率的配置 APK。更棒的是,当设备配置 ( 如语言 ) 发生变化时,Google Play 会检测到它,并下载该语言的配置 APK。为了进一步降低 APK 大小,我们正计划推出基于纹理压缩格式、图形 API 和新平台功能的分发方案。
动态功能 APK 包含用户首次安装应用时不需要的应用功能代码和资源。开发者可以把这些用途或功能添加到他们的应用中,Google Play 会按需提供这些动态功能模块,而不是在安装时统一添加,从而进一步减少应用下载体积。这也很好理解:我们有必要将那些消耗空间且在安装时根本用不着的功能,以及那些很少用得着的功能,都打包进动态功能模块中,这将显著减少用户安装时的文件下载量。
在如今,很显然构建一个统一的臃肿的 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 下发给用户。
除了压缩体积外,ABB 在 " 防二次打包 " 一类安全性上也有所表现,可安卓这一次改动真是技术更迭的推动又或者为了给用户更好的使用体验吗?
04
想要收拢权限的安卓
.aab 模块引入了 Split APK 概念。简单的来讲,就是在安装前,会自动检测用户的硬件配置,然后以多个 .apk 的形式安装应用。可目前,使用 Split APK 的应用程序,用户是无法直接提取安装的,都需要借助第三方工具来备份安装。这意味着,未来用户在非谷歌应用商店的第三方平台,下载安装应用会越来越困难。
虽然 .aab 模块化特性,极大的提升了开发者的更新维护的便捷性,节省了用户在安装应用的时间和存储空间 。就因为 .aab 的存在,随着用户使用设备、所在环境的不同,所安装的应用可能也不尽相同,应用也就是 " 不完整的 "。
并且,通过官方文档,我们发现了:使用 app bundle ,开发者就必须加入 Google Play 应用签名计划。签名相当于打上唯一的电子标签,因此,如果应用被以非正常方式提取分享,就可能导致签名改变,最终影响应用运行。除非,开发者自行在第三方平台提供完整的应用安装包。
再往深处想一下,如果说 .aab 应用格式落实,对 Android 用户而言,只是增加了第三方下载应用的难度。那么对于鸿蒙 OS 而言,这可能是一个巨大的挑战。
当然,这样的想法或许是我们多心了,究竟安卓应用这一次改变剑指何处,恐怕还需要时间来验证。
欢迎光临 澳洲同城网 (https://www.tongchengau.com/) | Powered by Discuz! X3.2 |