构建完项目后到as编译apk提示
Too many zip entries 65535
编译失败,有谁遇到过吗,如何解决的,查了一天没找到解决办法。
资源文件太多了。去掉一部分资源文件是可以编译的。
有谁遇到过吗
gradle 加下面的:
android {
…
defaultConfig {
…
multiDexEnabled true
}
}
加依赖:
implementation ‘com.android.support:multidex:1.0.3’
如果你用androidx:
implementation ‘androidx.multidex:multidex:2.0.1’
好像加这个就行了 具体的根据你自己的实际情况来吧。

好用记得回来发红包
这个方法我试过不行的,包括继承multiDex类,自定义类都试过,问题依旧。
图片合集一下再试试
那不太可能呢,不行的话,再看看具体的日志吧。
嗯,还在试别的办法
已经是合集过得了。。。
小声问问 您的包里具体有多少资源?
资源文件700多mb
先分析下打包后资源文件,哪些是可以合并的,是不是有太多碎的json文件,碎图,配置表文件,能合并就合并,不能合并就分包压缩,运行时在解压
只能在资源方面想办法了吗,没办法绕开as的限编译限制么,
可以在gradle里加下边配置试下
zip {
zip64 true
}
看来 cocos 还是不支持你这个这么大型的项目啊,没经过压力测试
实在不行的话
可以自己拆分dex重新编译
很多SDK工具都这么搞的
可以考虑把一些资源文件打成压缩包,加载游戏后远程加载,这样会降低包的大小
虽然zip64提供了允许65535和禁止两种模式:
static void checkFooterPolicy(Policy policy, long numEntries, Location cdLocation) {
if (policy == Policy.ALLOW)
return;
if (numEntries > 65535L) {
String msg = String.format(“Too many zip entries %d (MAX=%d)”, new Object[] { Long.valueOf(numEntries), Long.valueOf(65535L) });
throw new IllegalStateException(msg);
}
if (cdLocation.first > 4294967295L) {
String msg = String.format(“Zip32 cannot place Central directory at offset %d (MAX=%d)”, new Object[] { Long.valueOf(cdLocation.first), Long.valueOf(4294967295L) });
throw new IllegalStateException(msg);
}
if (cdLocation.size() > 4294967295L) {
String msg = String.format(“Zip32 cannot write Central Directory of size %d (MAX=%d)”, new Object[] { Long.valueOf(cdLocation.size()), Long.valueOf(4294967295L) });
throw new IllegalStateException(msg);
}
}
但是签名工具:默认写死了不让你用:
public SignedApk(@NonNull File file, @NonNull SignedApkOptions options)
throws InvalidKeyException, IOException {
this.options = options;
if (options.v1Enabled) {
// Improve V1 signing performance by briefly caching zip entry content.
this.archive = new CachedZipArchive(file, Zip64.Policy.FORBID);
} else {
this.archive = new ZipArchive(file, Zip64.Policy.FORBID);
}