生成签名Android App Bundle(AAB)时报java.lang.OutOfMemoryError如何解决
解决方案
1 调整全局Gradle JVM内存配置
打开项目根目录下的gradle.properties文件,找到org.gradle.jvmargs配置项,修改为更大的堆内存阈值,示例配置如下:
org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m -Dfile.encoding=UTF-8
- 若设备运行内存为8G,可将
-Xmx参数值设为2048m;16G及以上运行内存建议设为4096m或更高 - 修改完成后执行
./gradlew --stop(Windows系统执行gradlew.bat --stop)停止现有Gradle守护进程,再重新触发打包流程
2 单独配置BundleTool运行内存
报错触发在BundleTool执行阶段,若全局Gradle内存配置生效后仍报错,可在app模块的build.gradle文件中新增BundleTool专属内存配置:
android { // 保留原有配置不变 bundle { toolOptions { // 给BundleTool分配最大4G运行内存,可根据实际情况调整数值 jvmOptions = ["-Xmx4096m"] } } }
3 降低打包资源负载
如果项目包含大量冗余资源、多架构so库,可通过配置减少打包时需要处理的资源体积,降低内存占用:
- 在release构建配置中开启资源压缩和代码混淆:
android { buildTypes { release { // 原有签名、混淆配置保留 minifyEnabled true shrinkResources true } } } - 过滤不需要的ABI架构,减少so库打包体积:
android { defaultConfig { ndk { // 按需保留需要支持的架构 abiFilters 'armeabi-v7a', 'arm64-v8a' } } }
4 临时调试配置(仅作临时排查用)
如果以上方案均未解决,可在gradle.properties中临时添加以下配置,关闭并行编译和守护进程减少额外内存占用:
org.gradle.parallel=false org.gradle.daemon=false
打包完成后可删除上述配置恢复原有构建性能。
内容的提问来源于stack exchange,提问作者Arnav
相关产品推荐
相关产品推荐

