快應用技術架構及業務分析

xiaxveliang發表於2021-09-14

2018年3月 華為、小米、Oppo、Vivo、中興、聯想、魅族、一加、努比亞、金立 共10家國內終端廠商成立快應用聯盟,並召開快應用標準釋出會。
新成立的快應用聯盟,在快應用技術規範層面做了統一,保證快應用開發者開發的快應用,可以直接在所有快應用聯盟內廠商的終端裝置上執行。

2018快應用聯盟終端廠商

2019年中國移動終端公司海信先後加入快應用聯盟,快應用聯盟終端廠商增加到12家。

2019快應用聯盟終端廠商

2021年4月23日,快應用聯盟召開2021塊應用聯盟開發者大會,並宣佈酷派與從華為分拆出去的榮耀加入快應用聯盟。

2021塊應用聯盟終端廠商

截止到2021年9月,快應用聯盟終端廠商數量增加到14家,分別為:
華為、小米、Oppo、Vivo、中興、聯想、魅族、一加、努比亞、金立、中國移動終端公司、海信、酷派、榮耀。

一、快應用產生

2017年1月 微信正式推出小程式,截止到2017年底 微信小程式月活已突破2億,上線小程式已經超過58萬個,微信小程式開發者超過100萬,微信小程式使用者累計已超過 4 億。

微信擁有超過10億的使用使用者,面對如此龐大的使用者基數,與微信小程式的蓬勃發展,終端廠商聯合起來組成快應用聯盟,主要有以下兩方面的原因:

  • 維護終端廠商在 應用分發、應用預裝和應用營銷 方面巨大收益
    對於國內終端廠商,應用分發、應用預裝和應用營銷方面利潤巨大。而微信小程式的上線,使其在微信內形成閉環,擁有海量使用者的微信App直接轉變為應用分發市場,加之微信小程式的蓬勃發展,直接影響了終端廠商在應用分發方面的收益。
  • 阻擊微信小程式 爭奪應用分發入口的控制權
    微信擁有超過10億的使用使用者,面對如此龐大的使用者基數,單打獨鬥並不是終端廠商最好的選擇,結盟對抗、制定統一標準、共同推廣,將應用分發入口牢牢地把握在自己手中,成為了國內終端廠商必然的選擇。

二、快應用介紹

快應用宣稱 以Web前端語言開發原生應用使用者無需下載安裝,即點即用,享受原生應用的效能體驗

快應用在實現上使用HTML5語言ES6標準的js指令碼CSS3樣式標準以及Flexbox佈局標準進行開發,使用JS語言呼叫Android Framework提供的應用程式元件進行應用的渲染,並且以獨立程式的形式執行在Android系統中擁有與原生應用相近的使用者使用體驗

快應用開發語言

2.1 快應用入口

在快應用聯盟的手機裝置中,不同的裝置廠商,其快應用入口可能略有不同。但基本存在於手機的應用市場應用市場——快應用中心負一屏桌面快應用圖示等位置。
以下為華為裝置,快應用入口舉例:

快應用入口—應用市場

快應用入口—快應用中心、負一屏、桌面圖示

2.2 快應用現狀

快應用運營方:

快應用運營方為萬咖壹聯的子公司玩咖歡聚

機型支援情況:

截止到2020年9月,快應用聯盟官方論壇公佈的支援快應用的裝置以及機型如下圖所示:

2020年2月快應用機型覆蓋情況

快應用的機型覆蓋、場景覆蓋、框架版本(2020.09更新):
https://bbs.quickapp.cn/forum.php?mod=viewthread&tid=2524

發展狀況 2019:

快應用聯盟 生態合作方之一的輕粒子統計,曾於2020年1月14日公佈《2019快應用行業報告》

報告指出:

  • 截止到2019年12月,快應用月活3億應用開發者1.5萬
  • 快應用數量佔比最多的兩個品類依次為生活服務類快應用實用工具類快應用
    生活服務類快應用是與使用者衣食住行相關的場景,比如附近就餐、旅館推薦、叫車服務、天氣服務等;
    實用工具類快應用,如交話費、寄快遞(小米手機負一屏 快應用卡片 菜鳥裹裹)。

快應用應用品類分佈圖

發展狀況 2020:

快應用運營方 玩咖歡聚 於2021年4月20日,舉辦快應用聯盟開發者大會,其公佈的資料如下:

  • 2020快應用在網裝置覆蓋量超過12億;
  • 2020年快應用使用者留存達70.33%;
  • 與去年相比,活躍使用者穩步增長37%,活躍快應用數量穩步增長46.7%,實用工具成為使用者最為活躍的快應用品類。

注:
以上公佈的資料中,在網裝置覆蓋量為12億,指的是快應用聯盟裝置出貨量,也就是快應用聯盟終端廠商累計賣出的裝置數量,這些裝置中僅預裝了快應用執行框架的APP,可以為快應用的執行提供執行環境,並非是累計使用者12億。

2021年4月20日快應用聯盟開發者大會公佈的資料中,未包含任何快應用的日活、月活已上線快應用數註冊開發者數量以及累計使用者資料等關鍵數字。

快應用社群活躍度:

從當前快應用開發社群、快應用Github活躍程度,可以猜測快應用發展可能非常不順利,各種關鍵資料可能非常不樂觀。

  • 快應用開發者社群 註冊會員數量 僅2926快應用跟帖數量 僅7253。快應用開發者社群比較冷淡,開發者關注度不高。
    快應用社群註冊會員數量、快應用跟帖數量
  • 快應用Github對應的 sample開發案例fork數量 僅為205點贊僅為291,猜測快應用開發者數量應該比較少,猜測僅有2~3萬左右。
    快應用Github開發者fork量

基於以上資料推測,快應用發展可能非常不順利資料可能很不樂觀

總結

因快應用聯盟從未公佈過,快應用的日活、月活已上線快應用數註冊開發者數量以及累計使用者資料(快應用聯盟生態合作伙伴,輕粒子統計也僅在2020年1月公佈過一次2019年底快應用的月活、註冊開發者人數),其他關鍵資料均無法獲取。
僅就目前掌握的資料,就快應用發展現狀進行推測:快應用發展可能非常不順利 , 註冊開發者等資料可能很不樂觀

  • 從Github與社群活躍情況推測,快應用註冊開發者可能僅2~3萬;
  • 快應用的月活資料,更多的是靠華為、小米等終端廠商負一屏的工具類卡片來支撐,快應用使用者可能都不清楚自己使用過快應用,更不用說自己到快應用中心查詢相應的快應用(親身使用發現:快應用中心 在終端應用商城App的入口也較深,不易被使用者發現)。

三、快應用技術架構

快應用以Web前端語言開發原生應用,使用HTML5語言ES6標準的js指令碼CSS3樣式標準以及Flexbox佈局標準進行開發,使用JS語言呼叫Android Framework提供的應用程式元件進行應用的渲染,並且以獨立程式的形式執行在Android系統中擁有與原生應用相近的使用者使用體驗

3.1 技術架構

以下是我基於快應用開發文件反編譯快應用執行框架(quickapp_platform.apk)以及參考React Native實現原理繪製的快應用技術架構圖。

快應用的技術架構

3.1.1 快應用(xxx.rpk)

快應用打包後為一個xxx.rpk檔案,並且大小包不超過1M。

其包結構如下圖所示:
rpk包結構

開發快應用時,快應用工程目錄結構如下所示:

└── src
│   ├── assets          # 公用的資源(Images/Styles/字型...)
│   │   ├──images       # 儲存 png/jpg/svg 等公共圖片資源
│   │   └──styles       # 存放 less/css/sass 等公共樣式資源
│   ├── helper          # 專案自定義輔助各類工具
│   ├── pages           # 統一存放專案頁面級程式碼
│   ├── app.ux          # 應用程式程式碼的入口檔案
│   └── manifest.json   # 配置應用基本資訊
└── package.json        # 定義專案需要的各種模組及配置資訊

為保證使用者在快應用中心,點選對應的快應用時可以迅速開啟,供使用者使用,快應用的rpk包大小要求不能超過1M,否則無法通過快應用市場稽核。

rpk包大小不超過1M

3.1.2 快應用服務框架

快應用的執行環境是 一個已經預裝到終端手機的 App (quickapp_platform.apk):

  • 與微信小程式類似,微信小程式的執行環境由微信App來提供。
  • 而快應用的執行環境由quickapp_platform.apk來提供,quickapp_platform.apk這個App在裝置出廠前已經預裝到 快應用聯盟終端廠商的手機中,終端手機廠商稱之為快應用服務框架,實際為一個App。

3.1.3 快應用JS與Java Native API通訊

快應用號稱“以Web前端語言開發原生應用,擁有與原生應用相近的使用者使用體驗”,那麼“通過JS呼叫Java Native API就是一個待解決的問題”。
這一點上,快應用與React Native的實現是一致的,通過JavaScriptCore來實現。JavaScriptCore是開源專案WebKit程式碼的一部分,JavaScriptCore是WebKit內嵌的JS引擎。

  • JavaScriptCore可以實現在原生程式碼裡面執行JavaScript 而不用通過瀏覽器。
  • JavaScriptCore可以把原生物件注入到JavaScript環境中。
    JavaScriptCore提供了 JS 程式碼與原生程式碼互動的能力,通過 JavaScriptCore可以實現兩端的物件暴露,使得程式碼可以不斷地在JS環境和原生環境穿梭。

快應用的UI結構

快應用服務框架通過JavaScriptCore開源框架實現與Android原生程式碼的通訊,實現從JS的API到Java API的呼叫,從而實現使用Android原生應用元件進行渲染。

3.2 快應用如何下載

為保證使用者在快應用中心,點選對應的快應用時可以迅速開啟,供使用者使用,快應用的rpk包大小要求不能超過1M,否則無法通過快應用市場稽核。

這裡以小米快應用中心,點選下載快應用抓包進行舉例說明。

3.2.1 快應用中心

開啟小米快應用中心,其效果圖如下所示:

快應用中心

3.2.2 快應用列表資料

通過抓包,可以檢視小米快應用中心列表資料。開啟快應用中心時,應用列表資料中包含每個快應用的 包名 以及 描述資訊

快應用中心——快應用列表資料

3.2.3 快應用下載地址

以快應用 “荒野日記” 為例,使用者點選 “秒開” 按鈕時,快應用中心根據快應用包名請求對應快應用的下載地址

點選秒開時——根據包名獲取對應快應用的下載地址

3.2.4 下載快應用

仍然以快應用 “ 荒野日記 ” 為例,獲取到快應用的下載地址後,直接下載對應的快應用。
荒野日記快應用下載地址:
https://t2.market.xiaomi.com/download/Mina/0b7295bd94ba17ad2cd7598ad80dd7ffffa435403
下載後的快應用檔案為 0b7295bd94ba17ad2cd7598ad80dd7ffffa435403,該檔案雖然無副檔名,但實際一個壓縮包檔案(也是一個.rpk檔案)。

下載小程式

給下載後的快應用 0b7295bd94ba17ad2cd7598ad80dd7ffffa435403 新增一個副檔名:

下載後的小程式是一個壓縮包

解壓快應用(解壓.rpk檔案),可以看到其符合一個.rpk檔案的包結構,並且快應用中基本均為程式碼實現,幾乎沒有圖片資源(為了減小快應用xxx.rpk檔案的大小,提升使用者下載使用快應用的體驗)。

解壓後的快應用

再對比一下.rpk檔案的包結構,結構一致:
rpk包結構

3.3 快應用原理總結

使用者在快應用中心點選某個快應用時,快應用中心僅僅下載了一個小於1M的快應用程式入口,快應用的其他大部分媒體資源存放於遠端服務端(隨使用者使用按需逐步下載);
下載完成的快應用程式,其執行環境由一個叫做快應用執行框架的APP提供(快應用執行框架App在手機裝置出廠時,已經預裝到快應用聯盟的裝置中),從而在使用者感知上免去了快應用的下載與安裝過程,達到使用者快速使用的目的。
同時由於快應用程式包小於1M快應用功能承載能力有限,僅包含對應原生APP的部分功能或僅為某個原生遊戲APP的預覽版本

3.4 快應用 VS 微信小程式

快應用微信小程式在技術實現上基本沒有差別。

  • 微信小程式的執行環境由 微信App 來提供。
  • 快應用的執行環境由 quickapp_platform.apk(快應用執行框架) 來提供。
    quickapp_platform.apk 這個App在裝置出廠前已經預裝到 快應用聯盟終端廠商的手機中,終端手機廠商稱之為 快應用服務框架 ,實際為一個App。

微信小程式與快應用實現對比

參考

萬咖壹聯:
http://www.wankaonline.com/home

玩咖歡聚:
http://www.wankacn.com/

快應用官方:
https://www.quickapp.cn/

快應用介紹:
https://www.quickapp.cn/course

2019年快應用行業報告:
[https://statres.qinglizi.cn/quickapp_statistics)

快應用的機型覆蓋、場景覆蓋、框架版本(2020.09更新):
https://bbs.quickapp.cn/forum.php?mod=viewthread&tid=2524

React Native執行原理解析:
https://cloud.tencent.com/developer/article/1036325

詳解React Native渲染原理:
https://www.jianshu.com/p/7e7b462c187b

深入理解JavaScriptCore:
https://cloud.tencent.com/developer/article/1406122

JavaScriptCore 整體介紹:
https://zhuanlan.zhihu.com/p/29663994

NativeJS理解和使用:
https://www.jianshu.com/p/7b022c176a0b

== THE END ==

歡迎關注我的公眾號

相關文章