因项目资源数过大,导致打包安卓后有部分音效无法播放,且没有任何报错

  • Creator 版本: 2.4.5

  • 目标平台: Android

  • 重现方式:资源数很多,打包后光assets下的文件数+文件夹数已经超过了65535已经压了很多资源里才能勉强在这个数值周围徘徊,再多点连as打包都会报错

  • 首个报错:


    红线分开是两个音频的播放输出日志,中间没有任何报错或警告
    红框部分是我认为有问题的地方,因为为正数的时候有声音,未负数的时候播不了,这是我多次打包,每次都会随机有音效无法播放时这些不能播放的音效共同出现的问题

  • 之前哪个版本是正常的:

  • 手机型号:

  • 手机浏览器:

  • 编辑器操作系统:

  • 重现概率: 100%

你这个无法播放的音效文件大小是多少?你在creator编辑器里能播放这个音效吗?

文件不大只有几十到几百Kb,其次编辑器里能播放。而且按照图片里的文件路径把打好的apk包改成zip找到对应路径下的文件也能播放。再其次在代码 资源啥都不改的情况下,用cocos重新执行build,然后再打包,就会出现上个apk里不能播的音频突然能播了,然后又有新的上一次能播的音频不能播了,然后我找其中规律,就发现是我上图里红框位置,我发现只要那个参数是负数那么就一定播的时候没有声音了

还有一点很神奇的,就是比如当前这个build好的文件,我打包apk后有个别两三个播不了的,然后我把assets下的跟这个界面不相关的资源删掉一小部分也就是很少的资源后,再重新打包,发现所有的音频都能播了

这个有可能是长度太长,超出了long的峰值,再加就变负数了


现在已经用int64了

能否给个能重现的demo?

公司项目不方便额,我刚才又试了下好像也不是因为资源过多,因为我又试着删除了一次其他资源,结果发现还是有无法播出来的问题,但是能明确的是一定是这个参数为负数时就播不出来

你这个不是2.4.5的吧,我看我引擎里的哪里数值并没有int64啊,还是说你那边刚加的囊?

int64是creator3.6.0的,你可以参考3.6.0的定制下引擎

0.0额这怕是有点难了我再看看

你好能问下这个数值在as构建的时候是怎么生成的吗?因为我发现同一个apk装在两个不同的机子上,这个值竟然是固定的,也就是说这个值是cocos这边通过什么算法固定生成的。所以我想看看你们是咋弄的,导致会产生负数

这个值是从安卓JNIEnv获取音频文件信息的时候得到的,你可以调试这里看下JNIEnv是怎么生成这个值的。

大佬我这两天不停的打包测试发现了一个规律,就是我把apk改成zip解压后发现混淆里META-INF/CERT.SF这个文件中我先找到一个播放不了的音频所在的位置,那么从这个位置往下找到所有.mp3后缀的音频就都播不了了,但是中间的这些图片啊啥的其他资源都是能正常加载的,麻烦您那边想想会是啥问题啊

你试下把这段代码从3.6.0上拷贝过去,


再把这里改成int64_t

试下还会不会是负的

好的我试试


改了也看到改动了,但是还是有负的,然后为负的的时候还是无法播放
我这里没用那个int_64会报错,我看3.6是long long 就直接这样改了也能编译了

我这看的就是3.6.0,用的是int64_t,你是哪里看到用long long 的?


我再找个时间试下资源数很多的情况下会不会复现你这个问题。

你好,我又按照你说的改了下,发现是因为我在.h的声明文件里忘了改了,所以报错了,然后我改了下,可以正常打包,然后我测试还发现还是遇到了为负的数值,所以我在想是不是我取的时候就有问题了。
还有我这边资源很多引擎卡的基本上来回切换下能卡几秒,所以我们有一部分1G左右的资源是没有放到引擎里的,是通过商店里的如燕插件加载的,所以有一部分资源是放在外部的,打包的时候会手动挪到\build\jsb-link\assets下,外部资源加载测试都是没问题的,我看了挪动和不挪动时候的apk里的文件差异好像只有混淆哪里会多些内容其他的就是外部资源了没啥差异

这么多资源 能问问你的APK包有多大吗

2.47G :joy:

音频文件也是放在外部资源吗?可以尝试下把音频放到编辑器内打包的效果。