2018-05-06 Patch, 代码补丁

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

王宇 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

objc_msgSend 资料链接

objc_msgForward 资料链接

JSContext



自定义 "FFI"

node-ffi 资料

lua ffi 资料

预编译

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,794评论 25 709
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,262评论 4 61
  • 昨一朋友说,换工作之后你变了,变得都不像你了。 我第一反应,不对!我不是为了你对我的固有印象而活! 原本我可以浩浩...
    e137ceaa64cf阅读 727评论 1 0
  • 记得上中学的时候,在村里看到的一幅画面,一直根植于脑海,挥之不去。那是一个妇人,衣不蔽体,浑身肮脏,手上拿着一...
    木木向阳阅读 941评论 1 15
  • 今日重要的事情 很多人觉得节日送礼才有意义,我认识一个人就喜欢在普通的日子里给他人送礼。什么手工,书籍,看见的小礼...
    飘渺_d65f阅读 543评论 8 5