Unity 2018.4.33f1升级Gradle至3.6.0后构建AAB报文件不存在错误,不愿回退Gradle
问题根因
你遇到的gradleOut.aab does not exist报错,本质是Unity 2018.4.x 内置的Android构建后处理逻辑,和升级后的Android Gradle Plugin(AGP)3.6.0的产物输出规则不匹配。
APK构建走assembleRelease任务流,产物输出路径完全符合Unity内置脚本的硬编码预期,所以APK构建全程无报错;但AAB构建走bundleRelease任务流,AGP 3.6.0调整了该任务的输出路径规则,再加上部分场景下任务会被静默拦截直接中断、不生成目标产物,就会导致Unity后处理脚本去旧路径找文件时抛出不存在的异常。
无需回退版本的解决步骤
- 修改自定义Base Gradle模板
打开Unity的Project Settings > Player > Android > Publishing Settings > Build,勾选Custom Base Gradle Template,项目会自动生成Assets/Plugins/Android/baseProjectTemplate.gradle,在文件末尾追加路径强制对齐配置,让AAB产物输出到Unity预期的固定位置:project.afterEvaluate { if (project.plugins.hasPlugin('com.android.application')) { android { // 强制指定AAB文件名,和Unity脚本预期保持一致 bundle { release { outputFileName = "gradleOut.aab" } } } // 将bundleRelease任务的输出目录,设置为Unity硬编码读取的路径 tasks.named('bundleRelease') { destinationDirectory.set(file("${project.buildDir}/outputs/bundle/release")) } } } - 关闭AGP的AAB构建静默拦截
AGP 3.6.0默认开启未映射资源的压缩校验,如果项目包含ARCore依赖的模型、纹理类资源,会直接在bundleRelease任务执行时静默中断,既不弹出明显的编译报错,也不生成目标aab文件。在上述baseProjectTemplate.gradle的android配置块中追加:android { bundle { compression { disable { // 排除ARCore常见资源的压缩校验拦截 uncompressedAssets.add("**/*.fbx") uncompressedAssets.add("**/*.glb") uncompressedAssets.add("**/*.png") } } } } - 排查JDK版本不匹配的隐式报错
Unity 2018.4 默认内置JDK8,而AGP 3.6.0 最低兼容要求为JDK11,JDK版本不匹配会直接导致bundleRelease任务执行失败。打开Unity的Preferences > External Tools,将JDK路径替换为兼容2018.4版本的OpenJDK 11(版本号11.0.15),不要使用17及以上的高版本JDK,避免触发类版本校验报错。 - 临时获取全量构建日志定位真实问题
Unity Console面板默认不会输出Gradle的全量构建日志,遇到静默中断的场景,可以手动进入项目的Temp/gradleOut目录,执行命令gradlew.bat bundleRelease --stacktrace查看完整的任务中断堆栈,定位具体的构建阻塞点。
注意:需要确保Gradle Wrapper版本为5.6.4,和AGP 3.6.0的兼容要求对齐,不要使用6.0以上的Gradle版本,避免出现构建任务异常、产物路径再次偏移的问题。
内容的提问来源于stack exchange,提问作者Muhammad Abdullah
相关产品推荐
相关产品推荐

