cocos2d-x lua 覆盖安装热更代码不删除

本文介绍了解决iOS应用热更新时遇到的问题,即新版本提交后下载的仍是旧包且使用了热更新资源里的代码。通过调整本地版本号与热更服务器的比较逻辑,实现了正确地清除缓存并加载新版本资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

新版本提交IOS后,发现下载后的包还是旧的包,读取的还是热更资源里的代码

做法很简单,就是删除热更缓存里的代码

在cocos2d-x的AssetsManagerEx.cpp中,有做这个的操作,但是为什么没起作用呢?

原来他是这样写的

if (_localManifest->isLoaded())
{
// Compare with cached manifest to determine which one to use
if (cachedManifest) {
if (strcmp(_localManifest->getVersion().c_str(), cachedManifest->getVersion().c_str()) > 0)
{
// Recreate storage, to empty the content
_fileUtils->removeDirectory(_storagePath);
_fileUtils->createDirectory(_storagePath);
CC_SAFE_RELEASE(cachedManifest);
}
else
{
CC_SAFE_RELEASE(_localManifest);
_localManifest = cachedManifest;
}
}
prepareLocalManifest();
}

意思就是你本地的版本号要大于热更缓存里的版本号才会删除缓存代码

我很简单的做法,就是把本地版本号和热更服务器比较的代码改成了只有小于才会热更

在Manifest.cpp中

bool Manifest::versionEquals(Manifest *b) const
{
    // Check manifest version(b is Online Version,_version is local version)
if (strcmp(_version.c_str(), b->getVersion().c_str() ) < 0)  //修改的代码
    {
        return false;
    }
    // Check group versions
    else
    {
        std::vector<std::string> bGroups = b->getGroups();
        std::unordered_map<std::string, std::string> bGroupVer = b->getGroupVerions();
        // Check group size
        if (bGroups.size() != _groups.size())
            return false;
        
        // Check groups version
        for (unsigned int i = 0; i < _groups.size(); ++i) {
            std::string gid =_groups[i];
            // Check group name
            if (gid != bGroups[i])
                return false;
            // Check group version
            if (_groupVer.at(gid) != bGroupVer.at(gid))
                return false;
        }
    }
    return true;
}

就这样解决啦!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值