请教一下,多个平台一般怎么维护好一点呀

1.对不同的地方做一个简单的封装,例如抽几个配置数据,代码接口,资源文件,工程文件修改等。
2.针对这些不同的地方,加入差异文件夹,不同的平台和渠道用不同的差异文件夹,差异文件夹的内部目录树结构同开发文件夹一致,只存放差异的文件。如果对应目录结构里面没有差异的地方,那个子文件夹就不需要创建。
3.需要打包脚本的步骤,打包前,按目录树结构替换差异文件夹到开发文件夹,打包后,还原备份的原始文件。

基本上就可以解决多平台的问题了。目前我们小游戏和原生分别都十多二十多个平台。都没问题。

另外关于在cdn上的资源差异,同一平台不同渠道如果版本一样,完全可以用一个cdn:
1.小游戏开上md5cache,多版本叠加,cdn上同时有不同渠道的资源,就没问题。
2.原生平台在热更上做个“忽略热更“的文件夹,把关键差异配置放在包里不热更就可以。

1赞

:joy:

小游戏的各平台

看懂了,不太会操作,我去研究一哈

if else if else if else

已经写麻了

我们是一套代码,不同平台的话抽了一个管理类,接口写里边,他再去分别调用平台的接口

unity开发的时候使用预处理指令处理不同版本内容,cocos暂时还没遇到这个需求

面向对象,多态设计思路,是个好想法。

你可以试试,根据不同的平台,创建统一接口,根据不同的平台对象,实现自己平台的接口函数。

这样不管是外部调用,还是打包自定义平台的不同,都可以调用接口,接口会根据实际的平台去做差异化处理

我看大家都在说在代码上做,代码上是要做抽象(或者if else),不过根据多平台和渠道的经验来说,仅仅代码抽象是不够的:

1.仅在代码上抽象,会让所有的内容和代码都放在一个包里,举个例子,如果微信小游戏有多个渠道,每个渠道(发行给的)sdk文件不一样,提审用的(给审核人员看的)马甲小游戏也不同,如果仅在代码上做抽象接口和多个实现,那么所有的sdk和提审马甲小游戏都要放进包里面。所以一般我们也会做抽象接口和多个实现,但在打包时只保留一个实现,通过文件替换机制来替换对应的实现类与sdk文件。

2.很多情况下,不同渠道是参数与资源文件的差异,例如后台参数不同,加载页和登录页,logo也不同,在原生中甚至工程配置文件也不同。这时候需要有资源文件替换的机制,才能替换掉这些内容。

所以,还是以文件替换机制为核心会比较方便。


DY宏
WX宏
按照cocos官方的说法,帖子在这 自定义宏无法使用

顺带一提,如果根据这个道理,所有的console.log应该写在DEBUG宏下,因为你就算包一层只是不输出到控制台里,字符串还是在的
if(DEBUG){
console.log(“123”)
}

这个可以裁剪部分代码,还是有资源需要裁剪的。

文件替换有好的方案么

就是自己写打包脚本,传入差异文件夹名字,根据和开发工程文件树的差异,把add,replace,delete 列表计算出来,然后备份好被替换的文件,打包前一步替换,打包后恢复备份。就可以了。

你拿我这段话喂给ai,ai都能出一个脚本了。

不太清楚你的意思,其实你可以认为就是一个patch apply的过程,当然任何的文件都可以改变。这种覆盖型patch也不会有什么冲突之类的情况产生。

要单独安排一个管理类去处理的,
叫渠道管理也好,渠道适配也好,
总之一个功能, 一旦有可能要根据不同渠道单独分别实现,
就把这个功能抽象成一个方法, 让管理类去处理,
游戏开发过程中, 开发者只和管理类做交互,而不需要关系管理类的具体实现逻辑

管理类用if也好, 用 build-templates 也好, 看个人喜欢就好

我的做法是主分支抽象,并实现一个默认渠道(如叫:dev-web),然后不同渠道分支不同 new 实现。
我一直也觉得分支维护有点蛋疼,差异化大就不好合并,而且还要经常往分支合。
我也认为分文件夹方式比较好(貌似服务端接不同渠道API一般就是这么做的)再结合引擎的宏裁剪。
前端还是往大一点按平台做分支:IOS/Android/H5

无论如何都不要用分支做平台或者渠道管理,分支要去管理版本功能开发,其他都无所谓。

可以参考引擎的实现,你看它源码目录有好几套不同平台的适配

1赞

嗯嗯,下次改,平台管理这么做了发现其实也并不适合,变成每个版本分支都需要对应一个平台分支,比如有1.0.0 和 1.0.0_ios,如果 ios 只有一个分支那也很不灵活

搞几个平台脚本。在初始化时候根据平台去引用。有些用不了脚本的就用if判断