做者:騰訊 - 小德(任曉帥 koudleren)spa
Flutter幾乎從一開始就被人詬病SDK的包太大,真的是這樣子嗎?debug
分析Flutter的構建產物,發現包含四個部分,分別是:code
這部分是Flutter engine的so,包含各類平臺的so,在release和debug模式下包含的so不一樣,形成包大小不一樣,這塊對Flutter包大小影響很大。orm
Android包含的以下:圖片
1. 在debug模式下,so庫打入了x86_6四、x8六、arm64-v8a,總共22.28M
2. 在release模式下,so庫只有armeabi-v7a,總共3.46M
複製代碼
iOS包含的以下:資源
1. 在debug模式下,Flutter的Framework包含x86_6四、armv七、arm64,總共31M
2. 在release模式下,Flutter的Framework包含armv七、arm64,,總共13.8M
複製代碼
在debug模式下,Android和iOS在Dart的JIT模式下生產中間產物,由於不是生產環境,咱們就不分析了,主要看release模式下的區別。v8
在release模式下,Android生成的是Arm code,iOS生成的是Framework,這個Framework包含armv7和arm64form
Dart代碼的構建產物,依賴於業務的規模,業務越大,資源文件越多,這塊所佔的空間也會越大。class
第三個就是用來橋接Flutter和Native的Channel層代碼,這部分代碼所佔的空間很小,幾乎能夠忽略不計;sdk
第四個是資源文件,包括圖片等資源,這塊大小主要取決於業務,若是業務的資源不少,這塊也很難減下去,木有辦法的;
通過以上分析, Android release模式下,sdk大小爲3.46M
iOS release模式下,sdk大小爲13.8M
在Release模式下