主题: 怎么从原理上, 设计这个 Patch
Patch 是干什么的呢?
app 在运行的过程中,会出现一些问题。 你可以通过远端下发补丁文件,
你的 app 可以通过加载这个文件,就可以给有问题的代码打上补丁。
实现 Patch 的要素
- app 使用的语言,有被注入的可能性。
相当于,通过远端下发代码,可以把在 app 中运行的代码,给覆盖/替换执行了。
Java / OC , 都具备这种特性。具备这种要素, 才能实现 patch.
- 在 app 中植入,能够 eval Patch 使用语言的 context
JavaScript eval() 函数
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。
在 app 中,植入了 patch.
所使用的语言, 都能被 eval 的。
换句话说,app 里面有一个 context, 可以执行 context 里面的语言。
拓展阅读:
当然, 你自己写一个 DSL ,可不可以呢?
可以的。
自己写的 DSL 难。
也许有一些局限性,可能有一些场景考虑不周。
用现成的语言,做 app 的热更新,就方便多了。
譬如:
- Rua
- Ruby
- JS
iOS 可以利用的特性:
王宇 patch , 的原理, 同 JSPatch 的原理,基本相同。
ObjC 语言的 runtime
OC 特有的 ObjC runtime.
有一个自己的消息转发流程。
有自己的 msgSend , 和 msgForward