4

科普:为什么iOS的APP比安卓大好几倍?

 2 years ago
source link: https://www.jianshu.com/p/6f2adc5aeb9a
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

科普:为什么iOS的APP比安卓大好几倍?

12017.04.25 03:28:29字数 1,615阅读 4,515
说明 时间 首次发布 2017年04月25日 最近更新 2017年04月25日

在iOS和Android完成开发,发布App之后,有领导就提出了iOS的包比Android大很多的问题。

安装文件分析

我们都知道,在Android中的安装文件类型为apk,iOS为ipa,其实简单来讲,这两个安装文件都是个压缩包。以微信APP的apk(版本为6.5.10)为例,原文件大小在Windows上(NTFS文件系统)显示为44.1MB,经过WinRAR解压缩后占用空间为93.7MB。 而微信APP的ipa(版本为6.5.11)原文件大小为145MB,解压缩后占用186MB。

咋一看,ipa无论解压缩都确实要比apk大上不少,那来看看两个系统的安装文件里面包含了什么。

Android:一个apk文件解压缩后,主要有assets、lib、META-INF、r、AndroidManifest.xml、classes.dex、resources.arsc这几个文件和文件夹。

这里只说一下这些文件中占容量最大的一般是assets目录、lib目录、res目录和classes.dex文件。

  • assets目录存放静态文件,app需要用到一些音效、字体、表情包等都在此。
  • lib目录为依赖库文件,现在的apk大多都是包含armeabi的lib库,如果apk兼容x86,还会有x86的依赖库,这样这个目录就会更大一点了。
  • r即res、resource目录,主要存放资源文件,如图片、影像文件。
  • classes.dex文件则是Android中Dalvik虚拟机的可执行文件,由JAVA下的class文件编译而来。

iOS的ipa安装包则相对简单一些,主要文件夹为Payload,在Windows上会显示里面有一个APP名字命名的文件夹,如微信为WeChat.app,包括了APP所有需要的执行和资源文件。

对比两个安装文件,微信APP的主执行文件为WeChat,文件大小为132MB,其它文件其实只有54MB。Android的主执行文件包括classes.dex文件和lib目录,微信APP里面这些文件大小为52.6MB,而其它文件为41.7MB。

由此可见,两个系统的同样一个APP,安装包里面除开主要的执行文件,其它资源文件占用空间大小相差不多,并非是文章开头所说的不同苹果设备需要不同的套图,导致安装文件巨大。但仅从安装文件来看,iOS的APP确实要比Android版的大好几倍,那下面还要讲到两个系统的APP安装机制。


APP安装机制

以前Android主要采用Dalvik虚拟机,执行apk中的classes.dex文件,但后来为了提高APP启动和运行速度,从4.4.4版本开始,Android换用了ART虚拟机,apk安装到系统的过程中会进行预编译,把apk中的dex文件编译成oat文件,把字节码经过JIT即时编译器转换为机器识别码,所以apk安装包中有关程序部分的文件更像是一堆代码,占用空间较小。

iOS则不一样,由于iOS最早是基于mac电脑上的OS X同源开发,所以在APP的安装方式上也相似,简单来说iOS的APP本身就是一个大文件夹,类似Windows上解压即用的绿色软件,当你从App Store中下载安装到iPhone上,更像是一个复制文件的过程。

Android的安装机制,使得APP安装文件的大小,不代表安装到手机上之后的大小,而在iOS上则是安装文件有多大,安装完后基本上也是多大。那么实际情况如何呢?


实测APP安装后占用空间
Android安装测试:

这里在基于Android 7.1.2的Lineage 14.1和iOS 10.3.2系统上,对比微信和网易云音乐两个APP在应用商店上文件大小和安装后文件大小。

在应用商店上,微信APP的标注大小仅为44.1MB,但事实上APP安装完成后,查看大小却增大到104MB。网易云音乐APP标注大小为29.8MB,安装后为54.33MB。

iOS安装测试:

App Store上微信APP的标注大小为123MB,下载安装完后为121.3MB,应用大小却变小了,网易云音乐APP同样更是标注103MB,安装完成后为89.8MB,这是由于测试使用的是iPhone SE,App Store上标注的大小应该是以iPhone 7 Plus作标准的。这也说明在App下载安装过程中,App Store会根据设备型号来适配必要的文件。


  • App Store上标注的APP大小是安装之后的大小,Android应用商店大多只是显示安装文件的大小
  • Android安装APP后,占用空间其实和iOS版相差不大
    可以明显看到,Android在安装APP后大小出现翻倍的情况,因为前面提到,现在Android系统安装APP过程中会进行编译,所以装完后APP真正的占用空间大小就出来了,这也解答为什么在Android上安装一个才十几MB的APP,装完后存储空间不见了上百MB的疑问。

Android应用商店上只是显示APK安装文件的大小,而在App Store上显示的APP大小是安装到手机后的占用空间大小。这样的好处是,用户们会很直观地知道自己手机还够不够容量安装新的APP,而不会出现明明手机设置里面显示还有几十MB空余存储,却连个十几MB的APP都安装不进的困惑。

当然Android更小的安装文件方便下载到手机上,从Android 7.1.2已经大幅提升安装APP速度,只是在安装之前,大家要注意预留2-3倍于安装文件的存储空间。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK