1. 程式人生 > >在應用開發中,網易雲音樂如何兼顧質量和效益

在應用開發中,網易雲音樂如何兼顧質量和效益

在應用開發中,質量和效益是非常關鍵的因素。網易雲音樂作為使用者人數突破4億,成就移動音樂傳奇的應用,是如何在開發中兼顧質量和效益的?網易雲音樂Android負責人樑建將為您解讀。

框架賦能

image

典型的開發框架從上往下分為三層,分別是業務層、服務層、能力層,三者之間是垂直依賴的關係,且業務層之間的水平模組不互相依賴,這樣的分層有助於不同APP和同一APP間進行程式碼互用。

能力層跟業務邏輯完全沒有關係,可以直接遷移,服務層可以按需定製,最上面的業務層則是開發者最熟悉的業務模組。

外掛化

外掛屬於業務層的元件,行業中的設計方案很多,網易雲音樂在外掛設計時主要考慮三點因素:

設計簡單

開箱即用、用完即止,最好是原生方案。

維護成本

當一個APP有非常多外掛的時候,維護成本是非常重要的問題。有些外掛可能依賴宿主的程式碼或資源,會對應用造成很大的不確定性。

效能

要求外掛具有很好的執行效率。

網易雲音樂外掛設計實現:

image

首先,外掛主體載體是Fragment,非常輕量,可以嵌在任何一個Activity裡面。只要預埋一個Activity,就可以啟動任何一個外掛模組。網易雲音樂把UI元件和程式碼冗餘打包到外掛包中,這樣雖然增加外掛體積,但會減少維護成本。

對於圖片、網路這些能力層的功能,網易雲音樂則使用服務介面來提供。這樣一方面是為了減少依賴,另一方面可以讓開發者在外掛開發時保持和傳統APP開發相同的習慣。

服務介面主要使用兩種方式,一種是路由,一種是服務註冊。為了儘可能避免進行物件的序列化和反序列化,網易雲音樂把Meta層下沉到底部,開發者可以直接面向介面程式設計,同時建議外掛儘量不依賴程式碼,也儘量不要固定宿主的資源ID或者修改外掛的ID字首,以免造成冗雜。

得益於非常輕量的原生外掛實現,網易雲音樂執行效率非常高。

元件化

image

上層業務元件水平模組之間不相互依賴,也為元件化提供了很好的支援。如上圖,在開放一個動態功能時,只需將動態業務元件和核心業務元件打包在一起,便形成了一個動態業務殼;開發評論元件時,同樣是把評論元件和核心業務元件打包在一起。這樣的設計可以支援熱拔插,提高業務線的並行開發效率,同時可以極大地減少編譯速度。

全鏈路開發流程

image

全鏈路開發流程作為一個平臺,串起了開發過程中的很多節點。那麼,這套流程是如何保證開發效率的呢?

卡點

開發流程被分配到每個節點,每個節點都有各自的任務和責任。通過節點分配,將節點痛點逐一擊破,極大地提高開發效率。

自動化

自動化是整個平臺的核心,所有的自動化測試都是為了質量而生。自動化有一個非常重要的應用場景——自動打點,這是開發者的痛點,打點佔用了開發太多時間。雲音樂通過編譯期進行程式碼注入自動生成打點,極大地提高了效率,減少了人工出錯的可能性。

閉環

無論是版本資料,還是上線以後對資料指標的監控,雲音樂通過資料發展趨勢反哺於開發質量形成閉環。

以網路治理為例:客戶端的網路問題非常複雜,雲音樂通過觀察線上網路指標來輔助策略的調整。通過ABTest實驗,以觀察網路連通性是否提升,再通過觀察資料,調整網路優化策略,以此往復,形成閉環。

image

思考和建議

1.警惕拿來主義

不同方案適用於不同公司的問題,直接拿過來使用可能會有一些不良反應,所以一定要結合各APP的實際情況來仔細分析。

2.簡單設計

簡單設計意味著很多,更簡單的設計意味著更高效的執行、更少的維護成本,簡約往往並不簡單。

3.量化指標

沒有資料就沒有話語權,沒有資料就會失去方向,只有有了量化指標,才能呈現一個閉環。

4.勤思考 多溝通

需要開發者勤思考,多與他人溝通交流。例如在 “分享圖示”的設計上,不同的應用會做一些差異化的設計。但如果設計過度,導致與其他大部分應用有較大差異,使使用者無法識別出“分享圖示”時,會造成分享率降低的後果。

*本文根據樑建講師在安卓綠色聯盟開發者大會現場的議題分享整理而成。

想了解更多,請點選觀看講師精彩現場視訊>>>>

https://v.qq.com/x/page/o08043yugqw.html

安卓綠色聯盟會根據每期技術沙龍議題輸出精彩技術乾貨文章,分享講師PPT,為未能現場參加技術沙龍的您提供另一個乾貨學習機會。