说明 时间
首次发布 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倍于安装文件的存储空间。

更多相关文章

  1. Android(安卓)Studio开发生成自己的SDK核心Jar包文件
  2. Android使用Gradle命令动态传参完成打包,不需要修改代码
  3. android风格统一化修改上方标题栏颜色
  4. ubuntu中adb安装与使用,android真机调试进入data/data目录
  5. Android(安卓)so文件函数加密
  6. 网页二维码推广App的实现
  7. Android高仿微信图片多选功能
  8. android 中的两个文件夹res/raw和assets
  9. 记一次Build.gradle引发的ClassNotFound

随机推荐

  1. Android实现拍照或从相册中获取图片并且
  2. 关于Unity发布苹果并真机测试的设置与连接
  3. Android中实现native服务利用binder与应
  4. Android的签名文件生成两种方法
  5. 避免Drawable保持引用的内存泄露
  6. android textview 排版混乱问题
  7. Android怎么解决不同版本SDK的兼容性问题
  8. php运行过程和数据类型
  9. Android进阶——借助Loader机制以一种更
  10. Android的事件处理