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)當做一個混淆代碼的更佳方案。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM