Xamarin开发的时候大家都有一个疑问,就是apk文件会不会特别的大,启动会不会很慢。答案是肯定的,文件肯定大,启动肯定会慢,但是具体大多少、具体慢多少,有什么因素可以使apk文件稍微小一点、可以使启动时间稍微短一点呢?

How to make a Xamarin.Forms app have smaller apk size and start up faster?

在Xamarin的编译选项中有几个比较关键,分别是:BundleAssemblies AotAssemblies EnableLLMV和 AndroidLinkMode

这三个选项的编辑页面只有在enterprise版本里有,但是如果你是community版本,依然可以通过修改csproj文件直接修改这些编译选项。

通过创建一个默认的Xamarin.Forms工程,修改各种编译选项,然后看它的编译的apk大小和启动时间,得出下表。这里启动时间是指从点击启动app到肉眼判断第一个页面完全显示。

Bundle

AoT

LLVM

Link none

Link sdk

Link all

Api size (M)

Startup time (s)

1

Y

21

4.5

2

Y

15

4.24

3

y

y

y

24

4.2

4

y

y

y

y

17

4.6

Link all 大小减少6M (2)

5

y

y

y

y

22m

4.7s

Link sdk 大小减少10m (1)

6

y

y

y

y

32

5.5s

7

Y

Y

y

20

2.7

8

y

y

y

25.7

2.7

llvm加大启动时间2s (3)

9

Y

Y

27

2.5

AoT使apk大8M (4)

启动时间减少2s

(1)比较6和5:link sdk可以使得apk大小减小10M。

(2)比较5和4:link all可以使得apk大小再减小6M。

(3)比较8和5:llvm会使apk大小减小3M,但启动时间增加了2s。

(4)比较9和2:AoT会使apk大小变大8M

综合结论:

AndroidLinkMode对apk大小有很大影响,link all时apk文件最小。对启动时间基本无影响。

EnableLLMV会使apk大小减小,但启动时间变长。

AotAssemblies 使apk大小变大。

AotAssemblies 使启动时间变短。(这个是间接得出的结论,因为启动时间变化的因素中:link mode无影响,LLVM使时间变长,Bundle基本无影响,那么使启动时间变短的只能是AotAssemblies )

BundleAssemblies 对文件大小、启动时间的影响较小。

结论:

apk大小和启动时间是互斥的。建议的选项配置:使用BundleAssemblies、AotAssemblies  AndroidLinkMode(sdk & user,也就是all),不使用EnableLLMV。

同时可以得到,Xamarin.Froms程序,apk大小大约20M,启动时间2秒。

Xamarin App文件(apk)大小和启动时间的影响因素的更多相关文章

  1. Xamarin生成的APK大小分析

    原文:Xamarin生成的APK大小分析 刚接触Xamarin都会被Xamarin的售价吓一跳,另外就是它生成的APK大小,官方也有相关的说明,这里加上自己的理解同意讲解下: 以下是针对Android ...

  2. 6.关于Xamarin Android对APK包大小的处理

    降低学习成本是每个.NET传教士义务与责任. 建立生态,保护生态,见者有份. 对于apk 包的大小大家都是很敏感的,虽然现在安卓手机的性能和存储越来越厉害了.本着能少一点是一点的态度,我们还是要深入理 ...

  3. app的apk 安装的方法--adb--命令安装 (含把apk放某个文件夹,每次启动自己安装)

    adb安装 1.在app自动化之前,首先手机上有要被测试的app,如何把电脑本地上的app安装到手机上呢?可以在运行自动化代码前,在cmd输入adb指令,把电脑app安装到手机上 adb instal ...

  4. 把app(apk和ipa文件)安装包放在服务器上供用户下方法

    怎么把app(apk和ipa文件)安装包放在服务器上供用户下载? IIS服务器网站不能下载.apk文件的原因:IIS的默认MIME类型中没有.apk文件,所以无法下载.解决办法:给.apk格式文件添加 ...

  5. FileSizeUtil【获取文件夹或文件的大小】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 获取文件夹或者文件的大小,可以指定单位,也可以自动计算合适的单位值. 效果图 代码分析 常用的方法: getFolderOrFile ...

  6. Android性能优化-减小APK大小

    前言 用户通常会避免下载比较大的应用,特别是连接到2G和3G网络,或者按流量收费的设备.这篇文章描述了如何减小apk的大小,帮助你让更多的用户下载你的app. 一 理解APK的结构 在讨论如何减小ap ...

  7. Android开发——减小APK大小

    0. 前言 APK的大小对APP的加载速度,使用内存大小和消耗功率多少有一定影响.如何减小APK的大小对于Android开发者是一个永恒的话题. 查阅了很多相关资料,并将其做了删减以及总结.本文原创, ...

  8. 程序性能优化之APK大小优化(六)上

    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本篇文章将继续从APK瘦身来介绍APK大小优化:文章主要内容从理 ...

  9. 限制Xamarin获取图片的大小

    限制Xamarin获取图片的大小在App开发中,经常会使用网络图片.因为这样不仅可以减少App的大小,还可以动态更新图片.但是手机使用网络环境千差万别.当网络环境不是理想的情况下,加载网络图片就是一个 ...

随机推荐

  1. 速成制作rpm包

    FPM 由于很多软件在安装时需要编译,这会浪费不少的时间,为了提升部署效率,于是就想到制作rpm包.通常rpm包的制作是使用rpmbuild命令来制作,但是你需要知道它的语法,比较繁琐.这就用到了FP ...

  2. Vue+axios 实现http拦截及路由拦截

    现如今,每个前端对于Vue都不会陌生,Vue框架是如今最流行的前端框架之一,其势头直追react.最近我用vue做了一个项目,下面便是我从中取得的一点收获. 基于现在用vue+webpack搭建项目的 ...

  3. 创建,删除DOM

    需求说明: 1.上传图片,有删除功能,可上传5张,至少上传一张 html代码如下 <div class="imgUpBox"> <div class=" ...

  4. php头像上传预览

    php头像上传带预览: 说道上传图片,大家并不陌生,不过,在以后开发的项目中,可能并不会让你使用提交刷新页面式的上传图片,比如上传头像,按照常理,肯定是在相册选择照片之后,确认上传,而肯定不会通过fo ...

  5. ES5 forEach()用法和提前终止遍历

    forEach()方法从头到尾的遍历数组,为每个元素调用指定的函数,第一个参数接收的是一个函数,第二个参数是可选的,如果有第二个参数,则调用的函数被看作是第二个参数的方法(第二个参数可以作为第一个调用 ...

  6. 设计模式的征途—5.原型(Prototype)模式

    相信大多数的人都看过<西游记>,对孙悟空拔毛变出小猴子的故事情节应该都很熟悉.孙悟空可以用猴毛根据自己的形象复制出很多跟自己一模一样的小猴兵出来,其实在设计模式中也有一个类似的模式,我们可 ...

  7. OC中的私有变量和私有方法

    在类的实现即.m文件中也可以声明成员变量,但是因为在其他文件中通常都只是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private得.在 .m中定义的成员变量不能和它的头文件.h中 ...

  8. SSH 远程执行任务

    SSH 是 Linux 下进行远程连接的基本工具,但是如果仅仅用它来登录那可是太浪费啦!SSH 命令可是完成远程操作的神器啊,借助它我们可以把很多的远程操作自动化掉!下面就对 SSH 的远程操作功能进 ...

  9. 转:Linux中文显示乱码?如何设置centos显示中文

    怎么设置Linux系统中文语言,这是很多小伙伴在开始使用Linux的时候,都会遇到一个问题,就是终端输入命令回显的时候中文显示乱码.出现这个情况一般是由于没有安装中文语言包,或者设置的默认语言有问题导 ...

  10. 最常用的缓存技术---redis入门

      Redis简介 Redis是基于内存,也可以基于磁盘持久化nosql数据库,使用c语言开发. 数据存储结构:key-value 安装环境准备 Redis使用c语言开发,需要使用gcc编译程序进行编 ...