Android将已安装的用户应用程序的APK文件保留在/data/app目录中,将系统应用程序保留在/system/app目录中。这是否意味着每次启动该应用程序时,Android都会从APK文件中提取dex文件?如果没有,我可以安全地删除APK文件并仍然运行该应用程序吗?

#1 楼

Android APK通常包含这些内容。在Android 5+上,也会提取/data/app)。优化的结果存储在classes.dex中,因此每个安装或更新仅需对应用程序进行一次优化。其他所有内容都保留在APK中。因此,第一个答案非常明确:必须提供应用所需的dex2oatlib/之类的东西,它们在APK内。保留APK文件是出于支持目的。如果您删除APK,则该应用绝对不会启动。 (应用程序:我的资产在哪里?)其次,Google Play很久以前就添加了对“ Delta Update”的支持。在增量更新过程中,将计算旧软件包与新软件包之间的差异。然后GP下载“ Delta”并将更改应用于原始APK,以生成更新的APK,从而减小下载大小。

始终对APK进行签名。这样可以防止恶意修改程序包。您绝对不希望在不知道更改内容或是否已注入病毒的情况下安装经过修改的应用程序。 APK内的/data/dalvik-cache/可用于此目的。非官方的更改将导致签名不匹配,并且Android系统将拒绝安装修改后的应用程序。无需一个接一个地重新安装它们。如上所述,优化需要原始程序包中的assets文件。

评论


请注意,Google Play商店的增量更新功能取决于APK是否能够计算已安装和更新版本之间的增量以及后续的补丁。另外,APK已压缩,因此可以节省一些空间(任何人还记得ZipAlign吗?)

–塔莫格纳·乔杜里(Tamoghna Chowdhury)
17年5月8日在19:02

@Tamoghna Space并不是一个真正的问题,否则Android 5+不会从APK中提取lib /,iOS不会从IPA中提取所有内容。它仅用于基本完整性检查。

– iBug
17年5月9日在2:40

可执行文件很少很好地压缩-节省空间与压缩后的资源(如二进制化的XML文件)更多相关,后者不会被提取。此外,关于ZipAlign,在优化(读取字对齐)的压缩文件上,资源访问可以更快一些。

–塔莫格纳·乔杜里(Tamoghna Chowdhury)
17年5月9日在5:03

因此,资产文件(例如html和js文件)是否不会从apk复制到android文件系统中的特定位置?

–user1788736
18年4月27日在5:35

@ user1788736是。它们留在APK中。

– iBug
18年4月27日在5:38