Answers:
Android APK通常包含这些内容。
assets/
lib/
META-INF/
res/
AndroidManifest.xml
classes.dex
安装后,APK文件将复制到/data/app
,并classes.dex
通过dex2oat
在其上运行进行提取和“优化” (在Android 5+ lib/
上也被提取)。优化的结果存储在其中,/data/dalvik-cache/
因此每个安装或更新仅需对应用程序进行一次优化。其他所有内容都保留在APK中。所以第一个答案是很清楚的:比如像assets
和res
的需要的通过必须提供的应用程序,它们是APK内。保留APK文件是出于支持目的。如果您删除APK,则该应用肯定不会启动。(应用程序:我的资产在哪里?)
其次,谷歌播放添加了“增量更新”的支持很早就。在增量更新过程中,将计算旧软件包与新软件包之间的差异。然后,GP下载“ Delta”并将更改应用于原始APK,以生成更新的APK,从而减小了下载大小。
APK始终是签名的。这样可以防止恶意修改程序包。您绝对不希望在不知道更改内容或是否已注入病毒的情况下安装经过修改的应用程序。在META-INF/
里面的APK适用于这一目的。非官方的更改将导致签名不匹配,Android系统将拒绝安装修改后的应用。
同样,当您更新Android操作系统时,所有dex文件都会再次“优化”,因此您无需一一安装。如上所述,优化需要classes.dex
原始程序包中的文件。
lib/
从APK中提取,iOS不会从IPA中提取所有内容。它仅用于基本完整性检查。