下面打包时报的错误代码(只有前半部分)
CommandInvokationFailure: Gradle build failed.
C:/Program Files/Java/jdk1.8.0_171\bin\java.exe -classpath "D:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Tools\gradle\lib\gradle-launcher-4.0.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx2048m" "assembleRelease"
stderr[
FAILURE: Build failed with an exception.
* Where:
Build file 'F:\project\IlRuntime\ILRuntimeU3D-master\ILRuntimeDemo\Temp\gradleOut\build.gradle'
* What went wrong:
Could not compile build file 'F:\project\IlRuntime\ILRuntimeU3D-master\ILRuntimeDemo\Temp\gradleOut\build.gradle'.
> startup failed:
General error during class generation: 3566
java.lang.ArrayIndexOutOfBoundsException: 3566
at org.codehaus.groovy.classgen.asm.CallSiteWriter.getCreateArraySignature(CallSiteWriter.java:58)
应该是越界了, 3566这正是StreamAssets下资源数量不明,找到org.codehaus.groovy.classgen.asm.CallSiteWriter.getCreateArraySignature 的源码
private static String [] sig = new String [255];
private static String getCreateArraySignature(int numberOfArguments) {
if (sig[numberOfArguments] == null) {
StringBuilder sb = new StringBuilder("(");
for (int i = 0; i != numberOfArguments; ++i) {
sb.append("Ljava/lang/Object;");
}
sb.append(")[Ljava/lang/Object;");
sig[numberOfArguments] = sb.toString();
}
return sig[numberOfArguments];
}
数组的最大长度是255,所以就要解决StreamingAssets中文件数量记录值 ,如果其中的文件都是必要的那就删不了,只有修改build.gradle的属性【aapOptions】这个选项就是要记录的文件。修改这个就要使用自定义的gradle template,
就是将截图中的这个选项勾选
然后修改mainTemplate
这个就是默认的最后一个表示StreamingAssets所有文件都会被记录,将它删掉改成自己的文件后缀名,
aaptOptions {
noCompress '.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**
}
修改后
aaptOptions {
noCompress '.unity3d', '.ress', '.resource', '.obb','.ab','.manifest'
}
如果有什么不对的地方,请指出。