主題: 怎么從原理上臀蛛, 設(shè)計這個 Patch
Patch 是干什么的呢刊殉?
app 在運(yùn)行的過程中,會出現(xiàn)一些問題炮车。 你可以通過遠(yuǎn)端下發(fā)補(bǔ)丁文件舵变,
你的 app 可以通過加載這個文件,就可以給有問題的代碼打上補(bǔ)丁瘦穆。
實(shí)現(xiàn) Patch 的要素
- app 使用的語言纪隙,有被注入的可能性。
相當(dāng)于扛或,通過遠(yuǎn)端下發(fā)代碼绵咱,可以把在 app 中運(yùn)行的代碼,給覆蓋/替換執(zhí)行了熙兔。
Java / OC , 都具備這種特性悲伶。具備這種要素, 才能實(shí)現(xiàn) patch.
- 在 app 中植入黔姜,能夠 eval Patch 使用語言的 context
JavaScript eval() 函數(shù)
eval() 函數(shù)可計算某個字符串拢切,并執(zhí)行其中的的 JavaScript 代碼。
在 app 中秆吵,植入了 patch.
所使用的語言淮椰, 都能被 eval 的。
換句話說,app 里面有一個 context, 可以執(zhí)行 context 里面的語言主穗。
拓展閱讀:
當(dāng)然泻拦, 你自己寫一個 DSL ,可不可以呢忽媒?
可以的争拐。
自己寫的 DSL 難。
也許有一些局限性晦雨,可能有一些場景考慮不周架曹。
用現(xiàn)成的語言,做 app 的熱更新闹瞧,就方便多了绑雄。
譬如:
- Rua
- Ruby
- JS
iOS 可以利用的特性:
王宇 patch , 的原理, 同 JSPatch 的原理奥邮,基本相同万牺。
ObjC 語言的 runtime
OC 特有的 ObjC runtime.
有一個自己的消息轉(zhuǎn)發(fā)流程。
有自己的 msgSend 洽腺, 和 msgForward