極客星球 | Android SDK架構(gòu)設(shè)計(jì)之路

編者按: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/?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末卓囚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子诅病,更是在濱河造成了極大的恐慌哪亿,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件贤笆,死亡現(xiàn)場離奇詭異蝇棉,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)芥永,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進(jìn)店門篡殷,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人埋涧,你說我怎么就攤上這事板辽。” “怎么了棘催?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵劲弦,是天一觀的道長。 經(jīng)常有香客問我醇坝,道長邑跪,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任呼猪,我火速辦了婚禮画畅,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宋距。我一直安慰自己轴踱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布乡革。 她就那樣靜靜地躺著,像睡著了一般摊腋。 火紅的嫁衣襯著肌膚如雪沸版。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天兴蒸,我揣著相機(jī)與錄音视粮,去河邊找鬼。 笑死橙凳,一個胖子當(dāng)著我的面吹牛蕾殴,可吹牛的內(nèi)容都是我干的笑撞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼钓觉,長吁一口氣:“原來是場噩夢啊……” “哼茴肥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起荡灾,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤瓤狐,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后批幌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體础锐,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年荧缘,在試婚紗的時候發(fā)現(xiàn)自己被綠了皆警。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡截粗,死狀恐怖信姓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情桐愉,我是刑警寧澤财破,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站从诲,受9級特大地震影響左痢,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜系洛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一俊性、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧描扯,春花似錦定页、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至恩够,卻和暖如春卒落,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蜂桶。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工儡毕, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扑媚。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓腰湾,卻偏偏與公主長得像雷恃,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子费坊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 相信做Android開發(fā)的小伙伴倒槐,肯定使用過很多第三方的 SDK,比如極光 SDK葵萎、支付寶 SDK导犹、微博 SDK ...
    SuccessandFaile閱讀 2,551評論 4 6
  • 1. 移動架構(gòu)師主要工作是什么? 1.設(shè)計(jì)當(dāng)前架構(gòu)羡忘。包括新技術(shù)方案的指定和評審2.改進(jìn)過去架構(gòu)谎痢。根據(jù)業(yè)務(wù)的發(fā)展或技...
    豎起大拇指閱讀 839評論 0 1
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險厭惡者,不喜歡去冒險卷雕,但是人生放棄了冒險节猿,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 6,054評論 0 4
  • 公元:2019年11月28日19時42分農(nóng)歷:二零一九年 十一月 初三日 戌時干支:己亥乙亥己巳甲戌當(dāng)月節(jié)氣:立冬...
    石放閱讀 6,883評論 0 2