編者按:7月15日晚,由MobTech袤博科技主辦的一檔線上技術直播分享欄目【Coder Park】第一季第二講《移動端新風向》順利在雲端舉行,客户端負責人文軍分享了MobTech袤博科技Android SDK架構設計之路,從0到1開發及迭代過程中遇到的一系列難題,共同探討其解決思路和SDK開發架構升級。
以下為分享內容:
MobTech袤博科技開發者服務歷時9年,現已覆蓋全球近155億+移動端設備,業務覆蓋營銷、金融、商業地理等多個垂直行業,同時為政府業務提供支持。對於App開發者來説,會經常面臨架構選型以及SDK接入的一些痛點和問題,今天從“SDK架構設計”這個主題出發,分享MobTech袤博科技如何系統化打造SDK服務。
▌淺談SDK
SDK是軟件開發工具包的縮寫,它的主要作用主要包括以下方面。一是提供軟件必備功能,二是降低軟件開發和維護成本,三是極大縮短軟件開發週期,四是當今移動互聯網起飛的X因素,可以説沒有SDK移動互聯網不會發展這麼迅速。
SDK服務包含以下方面:一是提供SDK基礎業務功能,如授權分享、推送、一鍵登錄等;二是提供完善SDK的集成工具和文檔,方便開發快速接入;三是需要提供三方開放平台支持,除了對Android和iOS原生App開發支持外,還需要提供像Unity、Cocos、Uniapp、Flutter、APICloud等平台支持;四是需要提供7x24小時的在線服務,保證能及時響應開發者的各種問題。
▌Mob SDK架構
那麼在解讀MobSDK架構前,我們先來全面瞭解一下MobSDK。想必很多開發者瞭解我們,都是從ShareSDK開始,我們自2012年起,通過這款產品打開了移動開發者的市場,在ShareSDK引領市場的同時,我們陸續開發了MobPush、一鍵登錄、短信驗證碼、MobLink等系列產品。MobPush這款產品自上線以來,通過了3年時間的不斷優化和升級,目前在全方位推送功能和推送指標上都達到行業第一梯隊水平,並且完全免費。秒驗SDK則提供了當下比較流行的一鍵登錄功能,上線3年多,物美價廉且得到多方好評。目前產品推出9週年感恩回饋活動,為新老用户帶來了超多優惠福利,感興趣可以點擊“閲讀原文”瞭解。
MobSDK的整體架構按功能支持分為三部分,第一部分是SDK基礎功能,第二部分是集成工具支持,第三部分是三方開放平台支持,每一部分和模塊都是支持橫向擴展的。
第一部分SDK基礎功能架構可分為三層,第一層是SDK業務層,第二層是通用功能層,第三層是基礎工具集合層。SDK業務層將各業務之間互相獨立開,這樣每個功能SDK之間是相互獨立的,方便迭代和維護。通用功能層會將一些通用的功能從各SDK中抽離出來,單獨為一個模塊。基礎工具集合層提供了基礎工具框架,是經過長期積累的,穩定性較強,也獨立出了新的模塊。
第二部分是集成工具,這一塊也是尤為重要。首先要讓開發者接入進來,那麼就需要提供更加快捷接入方式,除了傳統集成文檔之外,我們提供了0代碼集成工具,像gradle插件、cocoapods、maven倉庫、三方開放平台組件(如Flutter組件、APICloud組件、UnityPackage等)。
第三部分是三方開發平台支持,針對Unity、Cocos、Uniapp、Flutter、APICloud等平台,我們提供了開源的橋接代碼和組件支持,方便所有移動開發者都能接入SDK。
▌從0到1開發
一般從0設計一款SDK,總體上可以分為5個步驟:基礎架構的設計、開放API接口設計、業務功能框架設計與開發、基礎核心庫設計與開發、打包與發佈。
第一步是基礎架構設計,一個好的架構可主要從可讀性、可擴展性、可維護性三個方面進行考慮,即功能模塊間相互獨立,降低耦合度,保證結構清晰易於維護。通常我們可以把SDK架構簡單分為兩個層次:業務層和通用功能層。業務層可以獨立成業務模塊,包括開放API接口和業務功能實現,能用功能層可以分為兩個模塊,包手通用功能模塊和基礎工具模塊。
第二步是開放API接口設計,是直接開放給開發者調用的,所以經常要轉化角色。針對如何調用這個接口,如何用起來更方便快捷,並且不用去考慮任何場景和問題,總結了以下幾個要點。
1.API接口命名需要規範,且通俗易懂;
2.接口輸入參數儘量少,如有必要參數,需要做好參數校驗;
3.接口儘量保證是非阻塞的,這樣不影響開發者正常業務邏輯處理;
4.接口調用日誌需要清晰明瞭,便於調試;
5.接口結果最好是直接返回,儘量少的使用回調,如有必要,可以在回調方法命名上明確回調所在線程,如在主線程回調,可以使用onResultInMainThread這種方式來命名回調方法。另外使用回調時需要考慮內存泄漏問題,由於開發者有可能是使用匿名內部類的方式進行回調傳參,這時如果調用程序的生命週期結束時回調還沒有回來,就需要主動移除回調,防止內存泄漏,所以使用回調時還需要提供移除回調的方法。
第三步是業務功能框架設計,不要過度設計,根據具體的業務需求來設計即可,不要為了一些未來很小概率發生的需求變化提前設計。
第四步是基礎核心庫設計與開發,在核心庫提煉過程中需要保證功能間互相獨立,降低耦合度。
最後是打包與發佈,可以通過jenkins自動獲取代碼和執行編譯打包,最終發佈到maven上,可以大大降低人為本地打包出錯的風險。
▌SDK主要問題及解決途徑
SDK開發主要面臨以下問題:SDK包體大小、兼容適配、四方依賴問題、隱私合規問題。
對於SDK包體大小,首先是代碼一定要精簡,不過度設計,代碼撰寫需儘量最優雅最簡潔的,其次混淆,理論上除了四大組件以及開放API接口外,其它的都需要進行混淆。兼容適配主要有4個層面的兼容問題:系統版本兼容、廠商兼容、屏幕兼容、以及新老版本兼容。系統版本兼容我們需要適配android 4.0以上的所有版本,一般官方每年Q3會發佈一個新的版本,在新系統正式發佈前我們需要做好適配,一般我們會在Q1-Q2研究並完成新系統的適配,做法先是先整體研究新系統的變更,並圈出與SDK相關的重點變更,最後根據官方指南,進行相關適配修改與測試;廠商兼容,這塊主要通過機型兼容覆蓋測試來進行功能適配,一般會覆蓋5大廠商的主流機型;屏幕兼容,主要中涉及界面相關的適配和測試;新老版本兼容,需要確保所有SDK版本都是向下兼容的,保證SDK發新版本後,開發者可以不用修改一行代碼就能直接更新到新版本SDK。
四方依賴指的是依賴的開源框架(如supportv4包、OkHttp等)、開放平台(如QQ分享、微信分享)、開發平台(如Flutter、Unity、Cocos等)。首先需要去開源依賴,不依賴任何三方工具包,完全基於原生的android.jar進行開發。對於依賴的四方開放平台和支持的開發平台,我們需要進行更新監控,以及定期更新,保證提供的基礎功能能正常運行。隱私合規主要關注官方隱私調整、應用市場隱私政策、以及國家網絡信息安全政策。通常我們可以走第三方安全檢測機構進行權威檢測,以及相關適配修改。
針對隱私合規這塊,MobSDK主要有三方面:一是隱私政策聲明,MobTech袤博科技針對SDK業務功能,出具了相應的隱私政策,確保SDK功能在合法合規的場景下使用。(對隱私適配這塊也設計了隱私控制API,在用户未提交隱私授權前,是不會做任何網絡請求和API調用的,同意授權後,才會初始化相關SDK功能);二是定期向第三方檢查機構送檢,三方檢查機構會按照國家最新相關規定和政策進行權威的安全檢查,並輸出檢測報告,當前我們通過了梆梆安全和愛加密等安全機構的檢測;三是我們出具了完整的合規與安全指南,根據指南可以解決隱私合規相關的問題。
關於我們
MobTech袤博科技作為運用大數據技術幫助企業擁抱數字時代的強力助推器,運用卓越的創新力和領先的大數據技術,幫助企業將數據轉化為營銷運營的洞察力。
未來,MobTechch袤博科技將積極探索大數據深度應用及發展,以客户需求為導向,貼合更多應用場景探尋市場未知的可能性,為全行業用户構建和諧完善的數據智能生態。