unity 编译游戏包时,报错:gradle build failed class too large

1. 报了什么错


我们在使用 Gradle 方式出包时,经常会出现如下的错误,导致总是无法正确地出包

DisplayProgressbar: Building Gradle project
CommandInvokationFailure: Gradle build failed. 
/Applications/Unity/PlaybackEngines/AndroidPlayer/Tools/OpenJDK/MacOS/bin/java -classpath "/Applications/Unity/PlaybackEngines/AndroidPlayer/Tools/gradle/lib/gradle-launcher-5.1.1.jar" org.gradle.launcher.GradleMain "-Dorg.gradle.jvmargs=-Xmx4096m" "assembleDebug"

stderr[

FAILURE: Build failed with an exception.

* Where:
Build file '/Users/zhoutaosheng/Documents/DistributeProject/Game/Temp/gradleOut/build.gradle'

* What went wrong:
Could not compile build file '/Users/zhoutaosheng/Documents/DistributeProject/Game/Temp/gradleOut/build.gradle'.
> startup failed:
  General error during class generation: Class too large: _BuildScript_$_run_closure3$_closure9
  
  groovyjarjarasm.asm.ClassTooLargeException: Class too large: _BuildScript_$_run_closure3$_closure9
  	at groovyjarjarasm.asm.ClassWriter.toByteArray(ClassWriter.java:549)
  	at org.codehaus.groovy.control.CompilationUnit$18.call(CompilationUnit.java:860)
  	at org.codehaus.groovy.control.CompilationUnit$18.call(CompilationUnit.java:875)
  	at org.codehaus.groovy.control.CompilationUnit$18.call(CompilationUnit.java:875)
  	at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1095)
  	at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:649)
  	at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:627)
  	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:604)
  	...

2. 为什么会出这样的错


出现这样的错,其原因是:groovy 函数会使用 /${UNITY_DIR}/AndroidPlayer/Tools/GrandleTemplates/mainTemplate.gradleaaptOptions.noCompress 来填充数组时,要求数组长度小于 255。对于 STREAMING_ASSETS,它会将 Streaming Assets 下的文件一个一个地添加到数组中,如此数组很容易就超过了。原始的 mainTemplate.gradle 如下所示:

aaptOptions {
        noCompress '.unity3d', '.ress', '.resource', '.obb'**STREAMING_ASSETS**
    }

3. 怎么解决?


解决这个问题的办法很简单,把 Streaming Assets 下的文件类型抄到这个数组,而不是一个个加进去。比如,Streaming Assets 下有 .awb,.bundle 类型的数据,将 mainTemplate.gradle 改成如下就能解决问题:

aaptOptions {
        noCompress '.unity3d', '.ress', '.resource', '.obb', ,'awb', '.bundle'
    }


不想改 unity 的设置,只针对当前工程修改,可以在 Android 的 PlayerSettings,使用自定义的 Gradle Template

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值