热修复JSPatch之实战教程

??接上篇《热修复JSPatch之接口设计》,在这篇文章主要给大家讲述一下如何快速具备热修复能力,当然了如果有人有志于把JSPatch系统的学习,甚至用JSPatch进行开发的,就没有必要听我在这里啰嗦了。

简单了解下JSPatch语法

??我这里只介绍一些简单常用的。

1. require

在使用Objective-C类之前需要调用 require(‘className’) :

require(‘UIView‘)
var view = UIView.alloc().init()

可以用逗号 , 分隔,一次性导入多个类:

require(‘UIView, UIColor‘)
var view = UIView.alloc().init()
var red = UIColor.redColor()

或者直接在使用时才调用 require() :

require(‘UIView‘).alloc().init()

2. 调用OC方法

调用类方法

var redColor = UIColor.redColor();

调用实例方法

var view = UIView.alloc().init();
view.setNeedsLayout();

参数传递

跟在OC一样传递参数:

var view = UIView.alloc().init();
var superView = UIView.alloc().init()
superView.addSubview(view)

Property

获取/修改 Property 等于调用这个 Property 的 getter / setter 方法,获取时记得加 ():

view.setBackgroundColor(redColor);
var bgColor = view.backgroundColor();

方法名转换

多参数方法名使用 _ 分隔:

var indexPath = require(‘NSIndexPath‘).indexPathForRow_inSection(0, 1);

若原 OC 方法名里包含下划线 _,在 JS 使用双下划线 __ 代替:

// Obj-C: [JPObject _privateMethod];
JPObject.__privateMethod()

3.defineClass

API

qqqq defineClass(classDeclaration, instanceMethods, classMethods)

@param classDeclaration: 字符串,类名/父类名和Protocol
@param instanceMethods: 要添加或覆盖的实例方法
@param classMethods: 要添加或覆盖的类方法

在使用的过程中发现property属性命名,方法命名要严格按照驼峰式命名,禁止在属性名,或者方法名中间使用下划线‘_‘ 此处要格外注意哦,血的教训积累出来的经验,如果使用了,会造成无法修复

如果想查看完整的教程可以点击查看

在实践的过程中发现,大部分人对于js方法不是很熟悉,写起来很慢,给大家找到了转换的网站转换网站地址

当然,转换后,我们是不能直接拿来用的,还是用很多的问题,比如宏定义无法使用,相关方法转换错误,js语法错误等等,我们可以使用下面的一个网站来进行js语法校验 js校验网址

通过上面的转换,校验,我们开始尝试在本地修复我们的bug,如果可以修复,并经过测试后,我们就可以上传我们的热修复脚本了。感兴趣的小伙伴可以尝试一下哦,下面是我写的一个小demo。 JSPatch修复demo

时间: 2024-10-10 17:16:31

热修复JSPatch之实战教程的相关文章

《android基于andFix的热修复方案》实战篇

有篇文章说的比较简洁,大家可以参考下:AndFix使用说明 下面说说实际使用中遇到的问题 1:如何继承到gradle项目中 dependencies { compile 'com.alipay.euler:andfix:[email protected]' } 截止目前2016-5-3 这种引用方式,是不会再armeabi-v7下面引入so库的,我们要手动添加进去 地址:https://github.com/alibaba/AndFix/blob/master/libs/armeabi-v7a/

AndFix热修复 —— 实战与源码解析

转载请注明:http://www.cnblogs.com/soaringEveryday/p/5338214.html 当你的应用发布后第二天却发现一个重要的bug要修复,头疼的同时你可能想着赶紧修复重新打个包发布出去,让用户收到自动更新重新下载.但是万事皆有可能,万一隔一天又发现一个急需修复的bug呢?难道再次发布打扰用户一次? 这个时候就是热修复技术该登场的时候了,它可以让你在无需发布新版本的前提下修复小范围的问题.最近研究了下几个热修复的开源框架,其中Nuwa等框架的原理是修改了gradl

Android热修复(HotFix)实战

线上的BUG一直是程序员头疼的问题.有时候仅仅是因为几行的代码,就能让你的用户损失严重.谷歌在Android Studio 加入了Insttan Run 机制.通过Apk动态加载的技术实现了应用非安装而进行代码层的改变.之后QQ空间团队的补丁开始了热更新的浪潮.用户不需要通过手动操作,进行App的版本更新,极大的保障了用户对于产品的粘合度,对于开发者而言能使用到这项技术当然再好不过,市面上的热更新,热修复他们的叫称不同,功能相同只是支持的范围有所差别.目前可用的开放平台有腾讯的Tinker以及H

热修复干货| AndFix热补丁动态修复框架使用教程

本篇文章会与大家一起学习使用阿里的AndFix热修复框架,可以说AndFix是国内热修复技术的开山始祖,尽管现在阿里已经放弃了对这个项目的维护,但是后来很多的热修复技术都借鉴了这一框架的实现思路. 1.什么是AndFix?AndFix是阿里巴巴出的一个专门针对Android的热修复框架,那什么是热修复呢?就是不需要重新安装APK而达到修复bugs的目的.看看阿里巴巴官方对AndFix的描述:英文好的可以看官网说明文档(有翻译不妥欢迎指出)1.AndFix是一个Android库,它是在线解决bug

超多慕课网实战教程破解自学教程百度云盘分享-Python/Java/前端后端/小程序/运维测试/人工智能

以下课程,需要的可以加我微*信:hgh813210,备注你需要的课程 Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式百度云实战分享 前端成长必经之路 基于Storm构建实时热力分布项目实战 Spark Streaming实时流处理项目实战 以慕课网日志分析为例 进入大数据 Spark SQL 的世界 手工测试企业项目实践及面试提升 Webpack + React全栈工程架构项目实战精讲 深度学习之神经网络核心原理与算法 Android应用发展趋势必备武器 热修复与插件化

最新最全慕课网实战教程-百度云盘-破解视频

以下课程,需要的可以加我微*信:hgh813210,备注你需要的课程 Java企业级电商项目架构演进之路 Tomcat集群与Redis分布式百度云实战分享 前端成长必经之路 基于Storm构建实时热力分布项目实战 Spark Streaming实时流处理项目实战 以慕课网日志分析为例 进入大数据 Spark SQL 的世界 手工测试企业项目实践及面试提升 Webpack + React全栈工程架构项目实战精讲 深度学习之神经网络核心原理与算法 Android应用发展趋势必备武器 热修复与插件化

十分钟教会你使用安卓热修复框架AndFix

腾讯最近开发出一个Tinker,阿里也有一个Dexposed框架,当然还有一个就是今天的主角热修复框架AndFix.接下来,我会从它的概念.原理.使用方法等为你详细介绍. 1.什么是AndFix?AndFix是阿里巴巴出的一个专门针对Android的热修复框架,那什么是热修复呢?就是不需要重新安装APK而达到修复bugs的目的.看看阿里巴巴官方对AndFix的描述:英文好的可以看官网说明文档(有翻译不妥欢迎指出)1.AndFix是一个Android库,它是在线解决bugs,而不是重新安装app的

NDK-JNI实战教程(二) JNI官方中文资料

声明 设计概述 JNI接口函数和指针 加载和链接本地方法 解析本地方法名 本地方法的参数 引用Java对象 全局和局部引用 实现局部引用 访问Java对象 访问基本类型数组 访问域和方法 报告编程错误 Java异常 异常和错误代码 异步异常 异常的处理 JNI的类型和数据结构 基本类型 引用类型 域ID和方法ID 值类型 类型签名 UTF-8字符串 JNI函数 接口函数表 版本信息 调用实例方法 CalltypeMethod例程 CalltypeMethodA例程 CalltypeMethodV

热更新和热修复 个人小结

热修复和热更新 1 热更新和热修复:在线修复程序的 BUG 2 JSPach 的使用原理: OC 是一门动态运行时的语言,方法的运行和对象的创建是在运行时中创建的.JSPatch 正的用运行时,通过JavaScriptCore.framework作为 JS引擎,从 JS 动态调用方法和对象到OC 中,再作用NSInvocation动态调用对应的方法.例 Class class = NSClassFromString(@"UIViewController"); id controller