[譯] Java、Kotlin、RN、Flutter 開發出來的 App 大小,你瞭解過嗎?

承香墨影發表於2018-03-27

[譯] Java、Kotlin、RN、Flutter 開發出來的 App 大小,你瞭解過嗎?

現在開發 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。

[譯] Java、Kotlin、RN、Flutter 開發出來的 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 內相當多的空間。

[譯] Java、Kotlin、RN、Flutter 開發出來的 App 大小,你瞭解過嗎?

我們可以通過刪除一些依賴庫,使用 Activity 而不是 AppCompatActivity 來進一步降低應用程式的大小。

Kotlin(550KB)

接下來,我們使用 Kotlin。如果你使用 Java 編寫過很長一段時間的程式碼,我想 Kotlin 應該會讓你眼前一亮。Kotlin 應用程式的 Release 版本,包含了我們在 Java APK 中能看到的所有內容,以及一些基於 Kotlin 的語法糖資訊。

[譯] Java、Kotlin、RN、Flutter 開發出來的 App 大小,你瞭解過嗎?

React Native(7MB)

如果你有前端(Web)的開發經驗,並希望使用 JavaScript 來開發 App,那麼 React Native 是一個不錯的選擇。

如果你希望在已釋出的 App 上,進行更快的功能迭代,使用 React Native 也可以讓你不必為每個小改動都發布應用市場。

由 React Native 生成的 Release apk 在 classes.dex 檔案中有幾個類,這些類有 12193 個針對此應用程式的引用方法。

[譯] Java、Kotlin、RN、Flutter 開發出來的 App 大小,你瞭解過嗎?

它還在 x86armeabi-v7alib 目錄中新增了一些 so 庫。總共新增了大約 6.4 MB 的空間。

[譯] Java、Kotlin、RN、Flutter 開發出來的 App 大小,你瞭解過嗎?

Flutter(7.5MB)

Flutter 的 cli 生成的 Release 版本的應用程式中,包含 C / C ++ 引擎和 Dart VM,它們構成了 Apk 的幾乎所有部分。該應用程式直接使用本機指令集執行,不涉及任何直譯器。

[譯] Java、Kotlin、RN、Flutter 開發出來的 App 大小,你瞭解過嗎?

本文裡介紹的幾種編寫 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…

今天在公眾號後臺回覆成長『成長』,將會得到我整理的一些學習資料,也能回覆『加群』,一起學習進步。

推薦閱讀:

[譯] Java、Kotlin、RN、Flutter 開發出來的 App 大小,你瞭解過嗎?

相關文章