Flutter应用安卓实体机运行报PackageAndroidArtifact$IncrementalSplitterRunnable错误
问题成因
这个错误的核心触发原因是Gradle构建APK时JVM堆内存不足,触发java.lang.OutOfMemoryError异常,负责APK架构拆分的com.android.build.gradle.tasks.PackageAndroidArtifact$IncrementalSplitterRunnable任务执行失败。
模拟器可正常运行的原因是:模拟器通常为单一x86/x86_64架构,构建时不需要处理多架构拆分逻辑,内存开销远低于全架构构建;而实体机运行时默认会构建全架构安装包,打包阶段需要处理的二进制资源量翻倍,超过了Gradle默认的JVM内存上限。
解决方案
方案1:调高Gradle JVM内存上限
- 打开项目路径下的
android/gradle.properties文件 - 修改
org.gradle.jvmargs配置项,调整为以下参数(可根据本地内存情况上调数值):
其中org.gradle.jvmargs=-Xmx4096m -XX:MaxMetaspaceSize=1024m -Dfile.encoding=UTF-8-Xmx4096m代表将JVM最大堆内存设置为4G,若内存充足可调整为-Xmx6144m(6G)或者-Xmx8192m(8G)。
方案2:过滤打包架构,降低构建开销
- 打开项目路径下的
android/app/build.gradle文件 - 在
android.defaultConfig代码块中添加ndk架构过滤配置:
该配置可以直接减少构建时需要处理的二进制文件数量,大幅降低打包阶段的内存占用。android { defaultConfig { // 其他原有配置保持不变 ndk { // 仅保留主流安卓实体机架构,不需要的x86、x86_64架构不再参与构建 abiFilters 'arm64-v8a', 'armeabi-v7a' } } }
可选优化:关闭调试阶段的压缩混淆
如果上述两个方案执行后仍有问题,可以临时关闭debug模式的代码和资源压缩,进一步降低构建消耗:
- 同样在
android/app/build.gradle文件中找到buildTypes.debug配置块,修改参数:buildTypes { debug { minifyEnabled false shrinkResources false // 其他原有配置保持不变 } }
内容的提问来源于stack exchange,提问作者Neeraj
相关产品推荐
相关产品推荐

