編者按:7月15日晚玄呛,由MobTech袤博科技主辦的一檔線上技術(shù)直播分享欄目【Coder Park】第一季第二講《移動端新風(fēng)向》順利在云端舉行晓锻,客戶端負(fù)責(zé)人文軍分享了MobTech袤博科技Android SDK架構(gòu)設(shè)計(jì)之路移宅,從0到1開發(fā)及迭代過程中遇到的一系列難題柔滔,共同探討其解決思路和SDK開發(fā)架構(gòu)升級宦芦。
以下為分享內(nèi)容:
MobTech袤博科技開發(fā)者服務(wù)歷時9年嘹履,現(xiàn)已覆蓋全球近155億+移動端設(shè)備腻扇,業(yè)務(wù)覆蓋營銷、金融砾嫉、商業(yè)地理等多個垂直行業(yè)幼苛,同時為政府業(yè)務(wù)提供支持。對于App開發(fā)者來說焕刮,會經(jīng)常面臨架構(gòu)選型以及SDK接入的一些痛點(diǎn)和問題舶沿,今天從“SDK架構(gòu)設(shè)計(jì)”這個主題出發(fā),分享MobTech袤博科技如何系統(tǒng)化打造SDK服務(wù)配并。
▌淺談SDK
SDK是軟件開發(fā)工具包的縮寫括荡,它的主要作用主要包括以下方面。一是提供軟件必備功能荐绝,二是降低軟件開發(fā)和維護(hù)成本一汽,三是極大縮短軟件開發(fā)周期,四是當(dāng)今移動互聯(lián)網(wǎng)起飛的X因素,可以說沒有SDK移動互聯(lián)網(wǎng)不會發(fā)展這么迅速召夹。
SDK服務(wù)包含以下方面:一是提供SDK基礎(chǔ)業(yè)務(wù)功能岩喷,如授權(quán)分享、推送监憎、一鍵登錄等纱意;二是提供完善SDK的集成工具和文檔,方便開發(fā)快速接入鲸阔;三是需要提供三方開放平臺支持偷霉,除了對Android和iOS原生App開發(fā)支持外,還需要提供像Unity褐筛、Cocos类少、Uniapp、Flutter渔扎、APICloud等平臺支持硫狞;四是需要提供7x24小時的在線服務(wù),保證能及時響應(yīng)開發(fā)者的各種問題晃痴。
▌Mob SDK架構(gòu)
那么在解讀MobSDK架構(gòu)前残吩,我們先來全面了解一下MobSDK。想必很多開發(fā)者了解我們倘核,都是從ShareSDK開始泣侮,我們自2012年起,通過這款產(chǎn)品打開了移動開發(fā)者的市場紧唱,在ShareSDK引領(lǐng)市場的同時活尊,我們陸續(xù)開發(fā)了MobPush、一鍵登錄琼蚯、短信驗(yàn)證碼酬凳、MobLink等系列產(chǎn)品寇仓。MobPush這款產(chǎn)品自上線以來究驴,通過了3年時間的不斷優(yōu)化和升級辩诞,目前在全方位推送功能和推送指標(biāo)上都達(dá)到行業(yè)第一梯隊(duì)水平污筷,并且完全免費(fèi)琢岩。秒驗(yàn)SDK則提供了當(dāng)下比較流行的一鍵登錄功能质礼,上線3年多兔院,物美價廉且得到多方好評零聚。目前產(chǎn)品推出9周年感恩回饋活動榨了,為新老用戶帶來了超多優(yōu)惠福利煎谍,感興趣可以點(diǎn)擊“閱讀原文”了解。
MobSDK的整體架構(gòu)按功能支持分為三部分龙屉,第一部分是SDK基礎(chǔ)功能呐粘,第二部分是集成工具支持满俗,第三部分是三方開放平臺支持,每一部分和模塊都是支持橫向擴(kuò)展的作岖。
第一部分SDK基礎(chǔ)功能架構(gòu)可分為三層唆垃,第一層是SDK業(yè)務(wù)層,第二層是通用功能層痘儡,第三層是基礎(chǔ)工具集合層辕万。SDK業(yè)務(wù)層將各業(yè)務(wù)之間互相獨(dú)立開,這樣每個功能SDK之間是相互獨(dú)立的沉删,方便迭代和維護(hù)渐尿。通用功能層會將一些通用的功能從各SDK中抽離出來,單獨(dú)為一個模塊矾瑰∽┤祝基礎(chǔ)工具集合層提供了基礎(chǔ)工具框架,是經(jīng)過長期積累的殴穴,穩(wěn)定性較強(qiáng)渔彰,也獨(dú)立出了新的模塊。
第二部分是集成工具推正,這一塊也是尤為重要。首先要讓開發(fā)者接入進(jìn)來宝惰,那么就需要提供更加快捷接入方式植榕,除了傳統(tǒng)集成文檔之外,我們提供了0代碼集成工具尼夺,像gradle插件尊残、cocoapods、maven倉庫淤堵、三方開放平臺組件(如Flutter組件寝衫、APICloud組件、UnityPackage等)拐邪。
第三部分是三方開發(fā)平臺支持慰毅,針對Unity、Cocos扎阶、Uniapp汹胃、Flutter、APICloud等平臺东臀,我們提供了開源的橋接代碼和組件支持着饥,方便所有移動開發(fā)者都能接入SDK。
▌從0到1開發(fā)
一般從0設(shè)計(jì)一款SDK惰赋,總體上可以分為5個步驟:基礎(chǔ)架構(gòu)的設(shè)計(jì)宰掉、開放API接口設(shè)計(jì)、業(yè)務(wù)功能框架設(shè)計(jì)與開發(fā)、基礎(chǔ)核心庫設(shè)計(jì)與開發(fā)轨奄、打包與發(fā)布孟害。
第一步是基礎(chǔ)架構(gòu)設(shè)計(jì),一個好的架構(gòu)可主要從可讀性戚绕、可擴(kuò)展性纹坐、可維護(hù)性三個方面進(jìn)行考慮,即功能模塊間相互獨(dú)立舞丛,降低耦合度耘子,保證結(jié)構(gòu)清晰易于維護(hù)。通常我們可以把SDK架構(gòu)簡單分為兩個層次:業(yè)務(wù)層和通用功能層球切。業(yè)務(wù)層可以獨(dú)立成業(yè)務(wù)模塊谷誓,包括開放API接口和業(yè)務(wù)功能實(shí)現(xiàn),能用功能層可以分為兩個模塊吨凑,包手通用功能模塊和基礎(chǔ)工具模塊捍歪。
第二步是開放API接口設(shè)計(jì),是直接開放給開發(fā)者調(diào)用的鸵钝,所以經(jīng)常要轉(zhuǎn)化角色糙臼。針對如何調(diào)用這個接口,如何用起來更方便快捷恩商,并且不用去考慮任何場景和問題变逃,總結(jié)了以下幾個要點(diǎn)。
1.API接口命名需要規(guī)范怠堪,且通俗易懂揽乱;
2.接口輸入?yún)?shù)盡量少,如有必要參數(shù)粟矿,需要做好參數(shù)校驗(yàn)凰棉;
3.接口盡量保證是非阻塞的,這樣不影響開發(fā)者正常業(yè)務(wù)邏輯處理陌粹;
4.接口調(diào)用日志需要清晰明了撒犀,便于調(diào)試;
5.接口結(jié)果最好是直接返回掏秩,盡量少的使用回調(diào)绘证,如有必要,可以在回調(diào)方法命名上明確回調(diào)所在線程哗讥,如在主線程回調(diào)嚷那,可以使用onResultInMainThread這種方式來命名回調(diào)方法。另外使用回調(diào)時需要考慮內(nèi)存泄漏問題杆煞,由于開發(fā)者有可能是使用匿名內(nèi)部類的方式進(jìn)行回調(diào)傳參魏宽,這時如果調(diào)用程序的生命周期結(jié)束時回調(diào)還沒有回來腐泻,就需要主動移除回調(diào),防止內(nèi)存泄漏队询,所以使用回調(diào)時還需要提供移除回調(diào)的方法派桩。
第三步是業(yè)務(wù)功能框架設(shè)計(jì),不要過度設(shè)計(jì)蚌斩,根據(jù)具體的業(yè)務(wù)需求來設(shè)計(jì)即可铆惑,不要為了一些未來很小概率發(fā)生的需求變化提前設(shè)計(jì)。
第四步是基礎(chǔ)核心庫設(shè)計(jì)與開發(fā)送膳,在核心庫提煉過程中需要保證功能間互相獨(dú)立员魏,降低耦合度。
最后是打包與發(fā)布叠聋,可以通過jenkins自動獲取代碼和執(zhí)行編譯打包撕阎,最終發(fā)布到maven上,可以大大降低人為本地打包出錯的風(fēng)險碌补。
▌SDK主要問題及解決途徑
SDK開發(fā)主要面臨以下問題:SDK包體大小虏束、兼容適配、四方依賴問題厦章、隱私合規(guī)問題镇匀。
對于SDK包體大小,首先是代碼一定要精簡袜啃,不過度設(shè)計(jì)坑律,代碼撰寫需盡量最優(yōu)雅最簡潔的,其次混淆囊骤,理論上除了四大組件以及開放API接口外,其它的都需要進(jìn)行混淆冀值。兼容適配主要有4個層面的兼容問題:系統(tǒng)版本兼容也物、廠商兼容、屏幕兼容列疗、以及新老版本兼容滑蚯。系統(tǒng)版本兼容我們需要適配android 4.0以上的所有版本,一般官方每年Q3會發(fā)布一個新的版本抵栈,在新系統(tǒng)正式發(fā)布前我們需要做好適配告材,一般我們會在Q1-Q2研究并完成新系統(tǒng)的適配,做法先是先整體研究新系統(tǒng)的變更古劲,并圈出與SDK相關(guān)的重點(diǎn)變更斥赋,最后根據(jù)官方指南,進(jìn)行相關(guān)適配修改與測試产艾;廠商兼容疤剑,這塊主要通過機(jī)型兼容覆蓋測試來進(jìn)行功能適配滑绒,一般會覆蓋5大廠商的主流機(jī)型;屏幕兼容隘膘,主要中涉及界面相關(guān)的適配和測試疑故;新老版本兼容,需要確保所有SDK版本都是向下兼容的弯菊,保證SDK發(fā)新版本后纵势,開發(fā)者可以不用修改一行代碼就能直接更新到新版本SDK。
四方依賴指的是依賴的開源框架(如supportv4包管钳、OkHttp等)钦铁、開放平臺(如QQ分享、微信分享)蹋嵌、開發(fā)平臺(如Flutter育瓜、Unity、Cocos等)栽烂。首先需要去開源依賴躏仇,不依賴任何三方工具包,完全基于原生的android.jar進(jìn)行開發(fā)腺办。對于依賴的四方開放平臺和支持的開發(fā)平臺焰手,我們需要進(jìn)行更新監(jiān)控,以及定期更新怀喉,保證提供的基礎(chǔ)功能能正常運(yùn)行书妻。隱私合規(guī)主要關(guān)注官方隱私調(diào)整、應(yīng)用市場隱私政策躬拢、以及國家網(wǎng)絡(luò)信息安全政策躲履。通常我們可以走第三方安全檢測機(jī)構(gòu)進(jìn)行權(quán)威檢測,以及相關(guān)適配修改聊闯。
針對隱私合規(guī)這塊工猜,MobSDK主要有三方面:一是隱私政策聲明,MobTech袤博科技針對SDK業(yè)務(wù)功能菱蔬,出具了相應(yīng)的隱私政策篷帅,確保SDK功能在合法合規(guī)的場景下使用。(對隱私適配這塊也設(shè)計(jì)了隱私控制API拴泌,在用戶未提交隱私授權(quán)前魏身,是不會做任何網(wǎng)絡(luò)請求和API調(diào)用的,同意授權(quán)后蚪腐,才會初始化相關(guān)SDK功能)箭昵;二是定期向第三方檢查機(jī)構(gòu)送檢,三方檢查機(jī)構(gòu)會按照國家最新相關(guān)規(guī)定和政策進(jìn)行權(quán)威的安全檢查回季,并輸出檢測報告宙枷,當(dāng)前我們通過了梆梆安全和愛加密等安全機(jī)構(gòu)的檢測掉房;三是我們出具了完整的合規(guī)與安全指南,根據(jù)指南可以解決隱私合規(guī)相關(guān)的問題慰丛。
官網(wǎng)鏈接:https://www.mob.com/?