如何无需重构建上传App为Unity Addressable新增远程内容(Android/iOS)
问题核心原因
不需要每次重发安装包,你现在拉不到新增远程资源的核心原因是Addressable的目录(catalog)更新逻辑没开,App只会读取首包内置的固定资源索引,自然识别不到你后续上传到服务器的新内容。
正确配置与操作流程
- 首包(上架的安装包)构建前的基础配置
打开Addressables Groups面板,对所有需要后续新增/更新的资源分组做如下设置:- 将
Build Path设置为RemoteBuildPath,Load Path设置为RemoteLoadPath,两个路径提前和你自己的服务器存储路径对齐 - 将分组的
Content Update Restriction选项修改为Can Change Post Release,不要选默认的Cannot Change Post Release——后者是给首包固定不修改的资源用的,选了之后只要分组内有新增/修改,就必须重新构建整包
打开Addressable Settings面板,找到Catalog相关配置: - 勾选
Build Remote Catalog,给catalog文件单独配置和资源一致的远程加载路径 - 取消勾选
Disable Catalog Update on Startup,允许App启动时检查远程catalog更新
- 将
- 首包构建后的备份要求
每次构建完要上架的正式安装包后,立刻去Addressable构建输出目录找到addressables_content_state.bin文件单独备份。
注意:这个文件是后续所有增量热更新的唯一基准,文件丢失就无法在不重打包的前提下做内容更新,直到你下次发布新的整包。 - 新增内容的正确构建步骤
后续要加新资源时,不需要重新构建App安装包,按以下流程操作即可:- 把新增的资源拖入之前设置好的支持远程更新的Addressable分组,不要放进标记为不可更新的固定分组
- 打开Unity菜单,选择
Addressables > Content Update > Check for Content Update Restrictions,在弹窗里选中你上次打正式整包时备份的addressables_content_state.bin文件 - 工具会自动扫描所有变动、新增的资源,确认无报错后选择构建内容更新包,不要直接选
New Build > Default Build Script做全量构建 - 把本次构建输出的所有远程文件(包含新的catalog文件、catalog哈希文件、新增的资源bundle)全量上传到你远程服务器的对应路径,不要修改文件命名、不要放错目录层级
常见踩坑点
- 远程服务器必须正确配置
.hash、.json、.bundle三类后缀文件的MIME类型,不要让服务器拦截这类文件返回403/404,否则App拉不到新的catalog文件,会自动 fallback 到首包内置的旧索引,自然识别不到新资源 - 如果你自己写了资源加载的自定义逻辑,不要在App启动后立刻加载新加入的资源,先主动调用
Addressables.CheckForCatalogUpdates()检查更新,再调用Addressables.UpdateCatalogs()完成catalog替换,等更新流程走完再加载目标资源,避免弱网环境下自动更新失败导致的资源丢失 - 每次做内容更新构建,都要基于上一次正式整包对应的
addressables_content_state.bin文件,不要用热更构建生成的同名文件替换基准备份,否则会导致老版本App无法识别后续更新 - 不要把新增资源放到
Cannot Change Post Release标记的分组里,这类分组的资源索引是固定写在首包内置catalog里的,只要有变动就必须重发整包
内容的提问来源于stack exchange,提问作者saad-tayyab
相关产品推荐
相关产品推荐

