问题描述
从 1.1.92 升级到 1.1.93 后,历史项目无法编译。原因是 com.bytedance.ads.api.FileVideoAdV2Api 中的 openApi2FileVideoAdPost 方法签名发生了破坏性变更:新参数 videoCoverId 被插入到了参数列表的中间位置(uploadType 与 videoFile 之间),而不是追加到末尾。
这导致所有按位置传参的调用方在升级 SDK 版本后直接编译失败(参数类型错位)。
复现步骤
- 在版本 1.1.92 下正常调用:
FileVideoAdV2Response resp = fileVideoAdV2Api.openApi2FileVideoAdPost(
advertiserId, filename, isAigc, isGuideVideo,
labels, uploadType, videoFile, videoSignature, videoUrl);
- 将 SDK 升级到 1.1.93
- 编译报错:no suitable method found for openApi2FileVideoAdPost(...) / 实际参与形参类型不匹配
原因分析
1.1.92 方法签名(9 个参数):
(Long advertiserId, String filename, Boolean isAigc, Boolean isGuideVideo, List labels, FileVideoAdV2UploadType uploadType, File videoFile, String videoSignature, String videoUrl)
1.1.93 方法签名(10 个参数):
(Long advertiserId, String filename, Boolean isAigc, Boolean isGuideVideo, List labels, FileVideoAdV2UploadType uploadType, String videoCoverId, File videoFile, String videoSignature, String videoUrl)
videoCoverId 本身是 optional 参数,但插入位置在中间,破坏了源码兼容性与二进制兼容性。
期望
SDK 作为公共依赖,patch 版本(1.1.x)的升级应保持向后兼容。建议:
- 新增 optional 参数追加到方法末尾,而不是插在中间,以保证调用方按位置传参时不被破坏;
- 或者采用 Request 对象封装参数(如 FileVideoAdV2Request),后续新增字段不会影响方法签名;
- 如果必须引入破坏性变更,请提升 minor 或 major 版本号,并在 release notes 中明确说明。
环境信息
- SDK 版本:1.1.92 → 1.1.93
- 相关类:com.bytedance.ads.api.FileVideoAdV2Api
- 相关方法:openApi2FileVideoAdPost / openApi2FileVideoAdPostWithHttpInfo / openApi2FileVideoAdPostAsync
问题描述
从 1.1.92 升级到 1.1.93 后,历史项目无法编译。原因是 com.bytedance.ads.api.FileVideoAdV2Api 中的 openApi2FileVideoAdPost 方法签名发生了破坏性变更:新参数 videoCoverId 被插入到了参数列表的中间位置(uploadType 与 videoFile 之间),而不是追加到末尾。
这导致所有按位置传参的调用方在升级 SDK 版本后直接编译失败(参数类型错位)。
复现步骤
原因分析
1.1.92 方法签名(9 个参数):
(Long advertiserId, String filename, Boolean isAigc, Boolean isGuideVideo, List labels, FileVideoAdV2UploadType uploadType, File videoFile, String videoSignature, String videoUrl)
1.1.93 方法签名(10 个参数):
(Long advertiserId, String filename, Boolean isAigc, Boolean isGuideVideo, List labels, FileVideoAdV2UploadType uploadType, String videoCoverId, File videoFile, String videoSignature, String videoUrl)
videoCoverId 本身是 optional 参数,但插入位置在中间,破坏了源码兼容性与二进制兼容性。
期望
SDK 作为公共依赖,patch 版本(1.1.x)的升级应保持向后兼容。建议:
环境信息