sdk就是把你的app代碼抽出來蚁鳖,形成一個(gè)依賴庫
以aar或者jar形式提供給app依賴用
涉及到插件化的時(shí)候 依賴會比較復(fù)雜
其它和app開發(fā)沒什么區(qū)別了
抽離代碼的時(shí)候注意業(yè)務(wù)抽象
比如游戲SDK 業(yè)務(wù)抽象后,大致就三個(gè)接口
初始化 登錄 支付
最后就是依賴庫和app的接口通訊
一般有兩種方式通訊
一個(gè)是用activity的result 回調(diào)
二是用接口callback
涉及activity的盡可能用activity去回調(diào)
不涉及界面的一般都用接口回調(diào)
用callback的好處是可以控制app的邏輯
app在任何場景收到callback都會執(zhí)行既定邏輯
比如SDK要切換賬號音五,直接用callback就能打破app的運(yùn)行邏輯 強(qiáng)行切換賬號
用activity的result就不行了辣恋,不能保證那個(gè)activity還活著
用全局callback的壞處是 內(nèi)存全局占用一個(gè)或多個(gè)callback亮垫,消耗內(nèi)存,還有一個(gè)問題是何時(shí)finish sdk的activity伟骨,何時(shí)用callback觸發(fā)回調(diào)
手動處理內(nèi)存回收
容易導(dǎo)致很多情況收不到callback 比如某些動作取消卻沒回調(diào)饮潦,導(dǎo)致app一直處于被動狀態(tài)
遇到跨進(jìn)程的可能會更麻煩點(diǎn),這種場景一般就需要兩個(gè)sdk,把跨進(jìn)程的邏輯封裝掉 降低接入方的接入成本
接口易用性携狭,業(yè)務(wù)解耦性
所有的目的都是易用性
要簡單好用继蜡,app和sdk業(yè)務(wù)解耦
使用者不需要關(guān)心sdk到底做了啥,只管輸入輸出
而且一定要非常簡單的接入 用起來很簡單
開發(fā)人員不需要管SDK內(nèi)部干了啥逛腿,只需要接入
以及提供什么參數(shù)給SDK稀并,剩下的SDK處理
大部分情況 無非就是各種callback
一個(gè)靜態(tài)類作為接口類,或者單例作為接口類
做的復(fù)雜點(diǎn) 就是我這種插件化 多SDK 公用一個(gè)接口
接口設(shè)計(jì)還有一些小技巧
不能直接給人家一個(gè)demo 讓人家拷貝什么的
要封裝成baseActivity 暴露抽象方法 讓app繼承這個(gè)BaseActivty實(shí)現(xiàn)抽象方法 SDK的業(yè)務(wù)流程都寫在base里面
SDK的使用者實(shí)現(xiàn)的activity只有寥寥數(shù)個(gè)抽象方法的實(shí)現(xiàn)单默,其它業(yè)務(wù)流程一概不管
遇到復(fù)雜的業(yè)務(wù)碘举,在BaseActivty中提供一個(gè)被代理過的callback給實(shí)現(xiàn)者,讓實(shí)現(xiàn)者用callback回調(diào)
實(shí)現(xiàn)者回調(diào)時(shí)搁廓,callback的代理代碼會執(zhí)行后續(xù)動作
簡單說就是callback的嵌套了
想套幾層套幾層 一般業(yè)內(nèi)規(guī)范是不超過兩層
多了后面接手的人看不懂
然后結(jié)合一些設(shè)計(jì)模式 讓代碼優(yōu)秀一點(diǎn)
其它的和app一樣了
什么性能優(yōu)化引颈、內(nèi)存泄露
耗時(shí)任務(wù)優(yōu)化,耗時(shí)的 mearuase draw layout什么的
windows的背景疊層什么的
一般SDK 應(yīng)該責(zé)任單一 境蜕,性能方面蝙场,影響很小
責(zé)任不單一的SDK就該分成兩個(gè)SDK
以上情況不涉及NDK。粱年。
記錄下來
避免白說這些 將來作為博客素材
其實(shí)SDK開發(fā)更應(yīng)該關(guān)注的是會遇到什么坑
這才是和APP開發(fā)有本質(zhì)區(qū)別的地方
我經(jīng)常被坑折磨的死去活來
最后發(fā)現(xiàn)什么技術(shù)也沒學(xué)到
可能就是學(xué)到這些坑
將來換工作 也就這些坑有點(diǎn)競爭力吧