現在開發 App 的方式非常多,原生、ReactNative、Flutter 都是不錯的選擇。那你有沒有關注過,使用不同的方式,編譯生成的 Apk ,大小是否會有什麼影響呢?本文就以一個最簡單的 Hello World App,來看看不同的框架,編譯出來的 Apk 大小,有什麼區別。當然,本文的環境下是一個最簡單的 Apk,其實只能部分說明問題,你覺得呢?
— 承香墨影
移動開發發展至今,已經可以接受很多方式來開發 App,例如基於特定平臺的原生開發方式(使用 Java 或者 Kotlin 開發 Android,使用 Objective-C 或者 Swift 開發 iOS);基於 Facebook 提供的 ReactNative;基於 Walmart 的 Electrode Native;基於 Ionic 框架;使用 Unity 開發一些特定的 App,以及最近 Google 釋出的 Flutter.io 框架來開發 App。
那你有沒有思考過,這些庫和框架,是否會對你的 App 大小有所影響?
我們來分別分析以這些方式編寫的應用程式的 Apk 檔案,這些應用程式非常的簡單,只包含頂部的標題和螢幕中心的文字控制元件(Hello World)。這是一個最低限度的基本 App。
首先對於這個測試,我會建立四個不同版本的 Apk。分別是:Java、Kotlin、React Native 和 Flutter。Android Api Level 均為 27。
然後使用 Android Studio 編譯成 Release 包,使用對應的 cli 編譯 React Native 和 Flutter。
它們將使用預設的 proguard 配置,最後我們使用 Android Studio 自帶的 Analyze APK 分析這些 Apk。
Java(539 KB)
首先使用 Java 來開始這次實驗,使用 Java 開發 Android 算是最常規也是最簡單的一種方式。正如前面描述的那樣,由於我們僅僅使用了 Java 和 Android 框架來建立這個應用程式,所以它將是最小的,唯一的依賴是 Android 支援庫,在這裡你可以看到它佔用了整個 Apk 內相當多的空間。
我們可以通過刪除一些依賴庫,使用 Activity 而不是 AppCompatActivity 來進一步降低應用程式的大小。
Kotlin(550KB)
接下來,我們使用 Kotlin。如果你使用 Java 編寫過很長一段時間的程式碼,我想 Kotlin 應該會讓你眼前一亮。Kotlin 應用程式的 Release 版本,包含了我們在 Java APK 中能看到的所有內容,以及一些基於 Kotlin 的語法糖資訊。
React Native(7MB)
如果你有前端(Web)的開發經驗,並希望使用 JavaScript 來開發 App,那麼 React Native 是一個不錯的選擇。
如果你希望在已釋出的 App 上,進行更快的功能迭代,使用 React Native 也可以讓你不必為每個小改動都發布應用市場。
由 React Native 生成的 Release apk 在 classes.dex 檔案中有幾個類,這些類有 12193 個針對此應用程式的引用方法。
它還在 x86 和 armeabi-v7a 的 lib 目錄中新增了一些 so 庫。總共新增了大約 6.4 MB 的空間。
Flutter(7.5MB)
由 Flutter 的 cli 生成的 Release 版本的應用程式中,包含 C / C ++ 引擎和 Dart VM,它們構成了 Apk 的幾乎所有部分。該應用程式直接使用本機指令集執行,不涉及任何直譯器。
本文裡介紹的幾種編寫 App 的方法,都存在優缺點,在實際工作中,應該根據需求選擇適合的方式。你還可以混合搭配這些框架,僅僅用它們的優點來開發 App 的部分功能。
例如,如果你想在 iOS 和 Android 應用程式之間共享程式碼,你可以嘗試使用 React Native 建立某些元件,具體操作請檢視 React Native 或 Flutter.io 的官方文件,如果你只關注 Android ,並且 Apk 大小是你一個比較重要的指標,你可以使用 Java 或 Kotlin。
本文的資料,其實都是基於一個最簡單的 APK,如果是分析 APK 大小的話,其實還有一個很重要的指標沒有參考,就是程式碼量的遞增,對 APK 大小的影響。
ReactNative 和 Flutter 因為其內部還需要包含一些解析器和引擎,本身就會有一些基礎庫在其內,所以變大也是符合預期的。
舉個例子:不同城市計程車的起步價不一樣,有些城市可能是 14 元起步,有些則是 7 元起步價,但是可能 14 元起步價的後期每公里遞增的價錢比 7 元起步價的低。這樣在兩個城市,開到多少公里之後,總是會有一個平均值,讓它們的費用相等。
在這些框架中也是一樣,它們只是起步價不一樣而已。
原文連結: android.jlelse.eu/comparing-a…
今天在公眾號後臺回覆成長『成長』,將會得到我整理的一些學習資料,也能回覆『加群』,一起學習進步。
推薦閱讀: