支付寶 App架構的原理與實戰,ndk開發入門

Android_devp 2021-09-18 05:12:27 阅读数:906

支付 app 原理 ndk

最下面是支付寶底層框架,提供微應用,微服務等概念。一個 HTML5 應用,也會被框架模擬成一個微應用,通過應用 ID 進行解耦。

[](

)1.2.1 JSBridge 介紹

支付寶 App架構的原理與實戰,ndk開發入門_移動開發

JSBridge 是 HTML5 容器的基石,橋接了 JS 環境與 Native,實現了 Native 代碼和瀏覽器環境的雙向通信,Native 代碼可以通過調用瀏覽器提供的接口運行JS,從而實現調用 JS 函數、傳遞參數到 JS 環境等;而瀏覽器到JS環境的通信是通過 Native 攔截瀏覽器的請求來實現,請求可以是網絡請求或者是一些內部函數的調用。

[](

)1.2.2 H5 容器定制化擴展

HTML5 容器提供了 2 種擴展方式:

  • JSAPI

JSAPI 方式給 HTML5 頁面增加了 Native 功能調用接口,通過實現自定義 JSAPI 類中的 Handler 方式,可以以 Native 的形式實現特定功能,例如調用 Native 加密函數。

  • 事件

HTML5 容器在狀態變化時會發送事件,通過監聽 HTML5 容器特定事件,可以實現對 HTML5 容器生命周期的處理,比如修改加載進度條顏色、修改頁面導航欄等。事件提供了更强的定制性,完全可以滿足對 HTML5 容器的各種自定義需求

[](

)1.3 容器穩定性

支付寶 App架構的原理與實戰,ndk開發入門_Android_02

上面在研發難度中,我們提及到了,HTML5 方式的研發難度是最高的,因為需要定制化內核進行性能及穩定性優化。目前支付寶采用的是阿裏集團的 UC 自研內核,並針對支付寶的 HTML5 容器進行了深度優化和定制。如圖所示,UC 內核和系統內核的卡頓卡死率的數據對比效果非常顯著,我們可以直觀地看到 Webview 穩定性的提昇。

[](

)離線包機制+發布平臺,滿足業務即時更新


目前支付寶業務的另外一個特點就是需要快速迭代,變化的政策、突發事件都需要我們可以快速把新的業務需求觸達給用戶。但是對於 App 開發者有一個不容忽視的問題,就是應用商店審核。由於審核的存在,App 上開發的業務會有一個統一排期,比如說月底會有新版本,那麼所有的業務進度都得考慮 App 的排期計劃。

[](

)2.1 離線包機制

為了做到良好的用戶體驗,我們在容器中引入了離線包機制。通過離線包機制,我們將原有從線上加載的 HTML5 應用,提前下發到本地,通過讀取 IO,或者是內存,進行頁面的渲染,達到接近原生的用戶體驗。

通過發布平臺,我們可以將不同的 HTML5 離線包,以單獨應用的形式,進行不同維度的下發,使原來 all in 的 Native 發布模式,改為各業務線自行定制發布計劃,自行制定發布標准,自行發布的並行發布形式,來滿足業務的快速迭代。

[](

)2.1.1 加載機制

支付寶 App架構的原理與實戰,ndk開發入門_移動開發_03

通過內存提前加載,定時更新,啟動預加載內存等手段,我們將一個業務包需要用到的資源加載到內存,從而使啟動過程盡量無感知,頁面秒開無白屏。同時,我們還有 Fallback 手段,保證在包損壞或者是未下載完成時,可以通過在線頁面的形式,保證業務的 100% 可用性。

[](

)2.1.2 公共資源包機制

所謂公共資源包,即所有 HTML5 離線包都可能會用到的公共資源的集合。公共資源包解决多個 HTML5 應用使用同一資源產生的冗餘問題。如 React 應用使用 ReactJS 框架代碼。您可以將公共資源放入全局資源包,以降低 HTML5 應用體積。

通過公共資源包機制,可有效降低各 HTML5 應用的包體積,從而使更新率提高,頁面開啟速度加快。

[](

)2.2 發布平臺

為了滿足快速迭代的需求,一個强大的發布平臺也是必不可少的。發布平臺的核心指標,就是將發布內容高效、精准的投放到指定的設備上,為了實現這個目標,我們做了如下的努力。

[](

)2.2.1 離線包大小管控及差量包機制

HTML5 容器離線包提供了更新機制,以單個離線包作為更新維度。因為單個離線包業務很簡單,所以離線包的大小是可控的,通常小於 500KB。我們通過大量的實踐,總結出來“500KB”這個值,既可以滿足單個業務的內容,也可以更高效地發布到設備上。500KB,在 4G 的時代,幾乎可以做到用戶無感知更新,即便是 2G/3G 也可以保證一個高的到達率。

上面說的是一個 HTML5 應用的大小。實際上,我們更新的包會更小,發布平臺會通過 diff 算法,計算出相同 HTML5 應用兩個不同的版本的差量包,差量包通常也就在幾 KB 至幾十 KB 不等,可以做到更高的下載成功率,下載成功率一定程度就意味著實際到達率。

[](

)2.2.2 Fallback 機制

在一些極端網絡場景下,新的業務資源包更新失敗,而我們又期望用戶使用的是最新的業務,這個時候 Fallback 訪問機制就會發揮作用。每個離線包資源都會在發布服平臺上存放一份,在剛剛說到的極端場景下,用戶會訪問服務器的 Fallback 地址獲取資源,從而保障頁面可用。

[](

)2.2.3 多維發布

另外,針對剛開發好的應用,我們可以通過發布平臺的灰度發布進行發放,通過外部灰度的形式,對業務指標進行驗證,達到標准後,方可正式發布,做到可灰度,可回滾。

[](

)更優越的 Hybrid 方案:小程序差异化解析


作為超級 App,一個最主要的特征就是開放。開放就是共享 App 的流量,讓外部夥伴的業務可以通過支付寶觸達用戶,這就面臨一個質量管控的問題。支付寶需要保證這些業務是合法合規的,保障用戶的財產安全。

[](

)3.1 離線包 VS 小程序

如果開發一方業務,離線包肯定是非常好的選擇。不過,要是開放給第三方合作夥伴構建生態的話,純 HTML5 頁面就有一些劣勢。

支付寶 App架構的原理與實戰,ndk開發入門_Android_04

上圖是 HTML5 離線包和小程序的細節對比。總結來說,對於開放給第三方的生態,從應用體驗來講,小程序更加統一,質量有保障;從應用安全角度來講,小程序是訪問我方發布服務器,不會直接訪問第三方鏈接,安全可控;從研發門檻上來說,小程序是更簡單的前端開發方式,同時也提供了非常豐富的組件。

[](

)3.2 小程序解析

支付寶 App架構的原理與實戰,ndk開發入門_移動開發_05

小程序其實和離線包本質是類似的,都是一種 Hybrid 應用,但小程序是基於一個定制的 DSL 語言,不是前端的標准,但是類似。在 DSL 規則下業務進行小程序的開發,不支持直接操作 DOM,這種 DSL 規則下的自由可以有效的進行質量管控。

小程序作為一個應用,他擁有完整的生命周期。從開發到關閉,開發者都可以感受到,這點也是 HTML5 所不具備的。另外,每個小程序之間從運行時和持久化上,都是完全隔離的,而且小程序運行在特定進程中,所以和支付寶也是隔離開的。

在渲染性能上,小程序采用雙線程模式將頁面渲染和業務邏輯分別放在兩個單獨的線程中,renderer 運行在 WebView 中,負責渲染界面;小程序業務邏輯運行在單獨的 worker 線程,負責事件處理、API 調用和生命周期管理。兩個線程之間通過 postMessage 以及 onMessage 進行數據交換,數據可以從 worker 線程傳遞到 render 重新渲染界面,同時 ?renderer 也可以將事件傳遞給對應的 worker 處理。一個 worker 可以對應多個 renderer,方便頁面間數據共享和交互。

在資源加載方面,小程序采用離線化方式加載,也就是說當打開小程序時,小程序離線包必須下載到本地,由於每個版本只下載一次,一方面節省了每次請求的資源開銷,另一方面啟動速度大大提昇了。當有新的版本時,發布平臺自動比對本地安裝的版本和最新版本產生並下發差量包,客戶端不需要下載整個包即可更新小程序至最新版。

[](

)3.3 構建生態

支付寶 App架構的原理與實戰,ndk開發入門_程序員_06

通過引入相同的小程序架構,使得小程序,可以作為生態進行多端互投。在支付寶中投放的小程序,可以只經過一些開放接口的適配,即可跑在基於相同小程序架構的 App 中。未來,開發者或第三方服務更多是面向小程序來開發,而 App 則是提供一個統一的架構,真正做到開放生態,用完即走的理念。

[](

)關於支付寶自研 HTML5 容器方案


mPaaS 離線包源自於支付寶原生方案,經曆了嚴苛的業務考驗,讓你直接和支付寶使用同一套框架層代碼,擁有統一容器及內核,相對系統內核獲取更低 Crash 率和 ANR 率,適配性强,並具備良好的、彈性的擴展能力,結合具體業務需求定制 JSAPI。

最後

總而言之,Android開發行業變化太快,作為技術人員就要保持終生學習的態度,讓學習力成為核心競爭力,所謂“活到老學到老”只有不斷的學習,不斷的提昇自己,才能跟緊行業的步伐,才能不被時代所淘汰。

在這裏我分享一份自己收錄整理上述技術體系圖相關的幾十套騰訊、頭條、阿裏、美團等公司20年的面試題,把技術點整理成了視頻和PDF(實際上比預期多花了不少精力),包含知識脈絡 + 諸多細節,由於篇幅有限,這裏以圖片的形式給大家展示一部分。

 CodeChina開源項目地址:《Android學習筆記總結+移動架構視頻+大廠面試真題+項目實戰源碼》

支付寶 App架構的原理與實戰,ndk開發入門_Android_07

支付寶 App架構的原理與實戰,ndk開發入門_Android_08

支付寶 App架構的原理與實戰,ndk開發入門_移動開發_09

還有高級架構技術進階腦圖、Android開發面試專題資料,高級進階架構資料 幫助大家學習提昇進階,也節省大家在網上搜索資料的時間來學習,也可以分享給身邊好友一起學習。

版权声明:本文为[Android_devp]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/09/20210918051227461L.html