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

來源:互聯網
上載者:User

標籤:應用   需要   一起學   java 開發   web   控制   .com   http   asc   

現在開發 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 個針對此應用程式的引用方法。

它還在 x86armeabi-v7alib 目錄中添加了一些 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 元起步價的低。這樣在兩個城市,開到多少公裡之後,總是會有一個平均值,讓它們的費用相等。

在這些架構中也是一樣,它們只是起步價不一樣而已。

原文連結:
https://android.jlelse.eu/comparing-apk-sizes-a0eb37bb36f

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

推薦閱讀:

  • 漫畫:程式員,你能“管理”好你的產品經理嗎?
  • 利用 Kotlin 的特性,最佳化 Intent 的資料傳遞!
  • 解決 Lottie 動畫包含圖片的問題!
  • Google 的 Flutter 學習資料!
  • 遠端控制智能電視,方案已開源!

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.