2018-05-06 Patch, 代码补丁

2018-05-06  本文已影响39人  plantAtree_dAp

主题: 怎么从原理上, 设计这个 Patch

王宇 patch 视频



Patch 是干什么的呢?

app 在运行的过程中,会出现一些问题。 你可以通过远端下发补丁文件,
你的 app 可以通过加载这个文件,就可以给有问题的代码打上补丁。



实现 Patch 的要素

相当于,通过远端下发代码,可以把在 app 中运行的代码,给覆盖/替换执行了。
Java / OC , 都具备这种特性。具备这种要素, 才能实现 patch.



JavaScript eval() 函数
eval() 函数可计算某个字符串,并执行其中的的 JavaScript 代码。

资料链接


在 app 中,植入了 patch.
所使用的语言, 都能被 eval 的。
换句话说,app 里面有一个 context, 可以执行 context 里面的语言。



拓展阅读:

当然, 你自己写一个 DSL ,可不可以呢?
可以的。

自己写的 DSL 难。
也许有一些局限性,可能有一些场景考虑不周。

用现成的语言,做 app 的热更新,就方便多了。

譬如:



iOS 可以利用的特性:

王宇 patch , 的原理, 同 JSPatch 的原理,基本相同。

ObjC 语言的 runtime

OC 特有的 ObjC runtime.

有一个自己的消息转发流程。

有自己的 msgSend , 和 msgForward

objc_msgSend 资料链接

objc_msgForward 资料链接

JSContext



自定义 "FFI"

node-ffi 资料

lua ffi 资料

预编译

上一篇 下一篇

猜你喜欢

热点阅读