• Xamarin App文件(apk)大小和启动时间的影响因素


    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将c#编译为native code的一个应用,也可以把这个特性(BundleAssemblies, AotAssemblies)当做一个混淆代码的更佳方案。

  • 相关阅读:
    算法学习——贪心篇
    Centos7下搭建LAMP环境,安装wordpress(不会生产博客,只是一名博客搬运工)(菜鸟)
    小白创建网站的曲折之路
    7.2.5 多层嵌套的if语句
    7.2.4 else与if配对
    7.2.3
    7.4 electirc.c -- 计算电费
    oracle数据库命令行查看存储过程
    Linux下如何查看进程准确启动时间
    7.2 if else 语句
  • 原文地址:https://www.cnblogs.com/codediscuss/p/6979105.html
Copyright © 2020-2023  润新知