Unity热更新方案InjectFix

采用InjectFix的热更新特性对c#代码进行修复,InjectFix对应的git地址为 https://github.com/Tencent/InjectFix

InjectFix无需对C#工程原有逻辑进行修改,并且可以用C#生成补丁,但是不能新增类和函数,因此更新方式也更加符合苹果审核规范。适合IOS端进行线上问题的修复

开发准备

拷贝InjectFix库文件

IFixToolKit拷贝到Unity项目的Assets同级目录

Assets/IFix,Assets/Plugins拷贝到Unity项目的Assets下

标识要热更新的类型

在Editor目录下创建InterpertConfig文件,对可进行热更的类进行配置。采用标识Namespace的方式,这样在该Namespace下的类均可进行热更新

using System.Collections.Generic;
using IFix;
using System;
using System.Reflection;
using System.Linq;

//1、配置类必须打[Configure]标签
//2、必须放Editor目录
[Configure]
public class InterpertConfig
{
    [IFix]
    static IEnumerable<Type> ToProcess
    {
        get
        {
            return (from type in Assembly.Load("Assembly-CSharp").GetTypes()
                    where type.Namespace == "YourNamespace" && !type.Name.Contains("<") 
                    select type);
        }
    }
}

修复流程

生成热更新资源

假定线上版本为1.0.0,此时需要发布一个对应的修复版本1.0.0.001

1、需要修改的文件添加库的命名域using IFix;在修改后的​函数上添加[Patch]标签。进行修复后,点击菜单栏的是InjectFix->Fix (新版本会有Fix,Fix(IOS)和Fix(Android)选项,直接选Fix选项)生成Assembly-CSharp.patch.bytes

2、将Assembly-CSharp.patch.bytes 上传到CDN服务器,对应信息和地址填入下方热更新配置表

3、服务器根据配置表下发对应热更新信息

热更新配置表

version

channel

fixVersion

abUrl

1.0.0

all

1.0.0.001

https://xxx.oss/app/hotfix/all/1.0.0.001

1.0.0

huawei

1.0.0.001

https://xxx.oss/app/hotfix/huawei/1.0.0.001

1.0.0

appstore

1.0.0.001

https://xxx.oss/app/hotfix/appstore/1.0.0.001

version:需要修复的版本号

channel:需要修复的渠道号,如果为all则为针对所有平台的修复包,如果为其他,则为具体渠道的修复包。优先判断具体渠道号的渠道包,如果没有则选择全平台修复包。

fixVersion:修复版本的版本号

abUrl:修复包的地址

客户端更新流程图

 

注意事项

在发布版本前需要先执行菜单栏InjectFix->Inject确保代码已经注入。否则热更无法生效

常见问题

Exception: can not load type[System.Int32,netstandard, Version=2.0.0.0, Culture = neutral. PublicKeyToken=cc7b13ffcd2ddd51]

这是由于补丁设置的backend和实际打包设置的不一样。补丁设置的是netstandard 2.0。所以把API Level改成.net 4.x 重新生成补丁包

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五仁烧饼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值