一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Flutter之Android包大小分析

 univasity 2024-01-15 發(fā)布于法國

一、背景

空的flutter項(xiàng)目編譯生成Android apk包其體積約50MB左右,而空的原生Android項(xiàng)目編譯生成的Android apk包其體積僅3.6MB左右,二者相差巨大!什么原因?qū)е逻@一結(jié)果呢?

基本猜測:flutter生成的Android安裝包apk中包含了大量flutter基礎(chǔ)庫代碼。這些基礎(chǔ)代碼以什么樣的形式存在apk中的呢?

為了解決以上疑惑故對flutter的Android包進(jìn)行分析對比。

二、Android包結(jié)構(gòu)

Android apk包本質(zhì)是一個zip壓縮包,可以將apk后綴改為zip并通過解壓工具得到內(nèi)部文件,一般包含如下文件:

  • assets目錄 存放需要打包到APK中的靜態(tài)文件
  • lib目錄 程序依賴的Native庫
  • res目錄 存放應(yīng)用程序的資源
  • META-INF目錄 存放應(yīng)用程序簽名和證書的目錄
  • AndroidManifest.xml 應(yīng)用程序的配置文件
  • classes.dex dex可執(zhí)行文件
  • resources.arsc 資源配置文件

如原生apk包文件:
原生apk包

apk反編譯工具

通過反編譯工具可以進(jìn)一步分析apk包內(nèi)容,常用工具如下:

  • apktool:編譯和反編譯apk,從apk中提取圖片和布局資源。
  • dex2jar:將可運(yùn)行文件classes.dex反編譯為jar源碼文件。
  • jdex-gui:查看aar源碼文件 。
  • apkanalyzer :Android Studio自帶的apk分析工具。

三、原生APK與Flutter對比

一般apk分debug和release版本,故分別對這兩種情況對比!

3.1 Debug包對比
flutter的debug apk包:

flutter debug apk

原生Android的debug apk包:

原生Android的debug apk包

二者Debug包對比

Debug包對比

總體體積(下載體積為apk應(yīng)用商店內(nèi)包實(shí)際大?。?/p>

名稱壓縮包解壓文件下載體積
Android-app.apk3.6MB8.10 MB3MB
flutter-app.apk49.5MB125 MB49.2MB
diff(flutter-android)45.9MB116.9MB46.2MB

通過對比發(fā)現(xiàn),造成debug包體積差異過大的主要原因(解壓文件對比):

  • lib下面添加了三種ABI的動態(tài)庫,體積約94MB

  • assets目錄下添加了一個kernel_blob.bin的二進(jìn)制文件,體積約38MB

3.2 Release包對比
flutter的release apk包:包含三種ABI的.so庫

release-flutter-app.png

Android的release apk包:

release-android-app.png

二者Release包對比

release-apk-對比.png

總體體積(下載體積為apk應(yīng)用商店內(nèi)包實(shí)際大小):

名稱壓縮包解壓文件下載體積
android-release-app.apk3.2MB7.4 MB2.6MB
flutter-release-app.apk15.7MB35.5 MB15.6MB
diff(flutter-android)12.5MB28.1MB13.0MB

通過對比發(fā)現(xiàn),造成release包體積差異過大的主要原因(解壓文件對比):

  • lib下面添加了三種ABI的動態(tài)庫,體積約34.1MB

  • assets目錄下文件,體積約1MB

四、flutter生成不同ABI動態(tài)庫的apk包

通過剔除不必要的ABI動態(tài)庫.so包,從而減少apk包體積大小。

4.1 ABI簡介

不同的 Android 設(shè)備使用不同的 CPU,而不同的 CPU 支持不同的指令集。CPU 與指令集的每種組合都有專屬的應(yīng)用二進(jìn)制接口 (ABI)。 android支持的 ABI如下:
cpu架構(gòu).png

ABI適用設(shè)備市場占有率適配廠家
armeabi-v7a第7代及以上的 ARM 處理器。2011年15月以后的生產(chǎn)的大部分Android設(shè)備都使用它。一些老舊的手機(jī)淘寶
arm64-v8a第8代、64位ARM處理器目前主流版本微信
armeabi第5代、第6代的ARM處理器,早期的手機(jī)用的比較多較少支付寶、手Q、舊版微信
x86平板、模擬器用得比較多很少
x86_6464位的平板很少

高版本的arm架構(gòu)會兼容低版本的arm架構(gòu),一般廠商只會選定一個cpu架構(gòu)進(jìn)行適配,為了減少apk包大小我們可以選定armeabi-v7a或者arm64-v8a即可。

4.2 flutter打不同ABI的apk包

通過下面的命令,可以生成不同ABI的apk包,該命令默認(rèn)release并開啟壓縮:

flutter build apk --split-per-abi

flutter-so-apk.png

包大小列表:
flutter-arm64.png
flutter-armeabi-v7a.png
flutter-x86-64.png

打包含單獨(dú)ABI的release apk包平均大小6MB左右,可以有效的降低包體大小。

五、總結(jié)

初始項(xiàng)目的flutter打apk包情況如下:

  • debug環(huán)境:包體較大,因?yàn)闆]有壓縮且包含多個ABI的so文件以及資源文件,包大小為50MB左右。
  • release環(huán)境:包體較小,因?yàn)殚_啟了壓縮且僅打單個CPU架構(gòu)的so文件,包大小可以降低到6MB左右。

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    日本大学生精油按摩在线观看| 成人欧美精品一区二区三区| 国产偷拍盗摄一区二区| 久久一区内射污污内射亚洲| 人人妻人人澡人人夜夜| 狠狠做深爱婷婷久久综合| 国产情侣激情在线对白| 国产精品一区二区三区欧美| 香蕉久久夜色精品国产尤物| 日韩一级欧美一级久久| 欧美日韩亚洲巨色人妻| 日韩视频在线观看成人| 欧洲日韩精品一区二区三区| 国产日韩欧美专区一区| 99久久精品免费看国产高清| 久久综合九色综合欧美| 手机在线不卡国产视频| 午夜传媒视频免费在线观看| 亚洲熟女乱色一区二区三区| 亚洲精品国产福利在线| 91福利免费一区二区三区| 国产亚州欧美一区二区| 日本东京热加勒比一区二区| 好吊色免费在线观看视频| 不卡中文字幕在线视频| 日本加勒比在线观看不卡| 熟妇久久人妻中文字幕| 国产91麻豆精品成人区| 久久婷婷综合色拍亚洲| 中文字幕亚洲视频一区二区| 欧美黑人黄色一区二区| 亚洲国产av一二三区| 精品少妇人妻av免费看| 久热人妻中文字幕一区二区| 欧美午夜性刺激在线观看| 国产精品不卡高清在线观看| 国产免费一区二区不卡| 中文字幕精品人妻一区| 91人妻人人做人碰人人九色| 国产在线观看不卡一区二区 | 亚洲中文字幕视频在线观看|