unity 打包时 StreamingAssets文件的数目过多

下面打包时报的错误代码(只有前半部分)

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,

unity 打包时 StreamingAssets文件的数目过多_第1张图片

就是将截图中的这个选项勾选

然后修改mainTemplate

这个就是默认的最后一个表示StreamingAssets所有文件都会被记录,将它删掉改成自己的文件后缀名,

    aaptOptions {

        noCompress '.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**

    }

修改后

aaptOptions {

        noCompress '.unity3d', '.ress', '.resource', '.obb','.ab','.manifest'

    }

如果有什么不对的地方,请指出。

你可能感兴趣的:(Unity3D,Android)