M1 Mac Monterey Xcode13.1下React Native构建安卓报JVM参数错误
MaxPermSize是JDK 8及更早版本中用于设置永久代最大内存的JVM参数,JDK 9及之后版本废弃了永久代机制、替换为元空间(Metaspace),该参数也被完全移除,你使用的JDK 17无法识别该参数,因此无法启动Java虚拟机。
方案1:修改项目Gradle配置(优先推荐,不需要改动系统环境)
找到项目目录下的android/gradle.properties文件,找到包含MaxPermSize的配置行,默认配置一般如下:
org.gradle.jvmargs=-Xmx4g -XX:MaxPermSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
将-XX:MaxPermSize=4096m参数直接删除,或者替换为适配高版本JDK的元空间参数-XX:MaxMetaspaceSize=4096m即可,修改后的示例配置:org.gradle.jvmargs=-Xmx4g -XX:MaxMetaspaceSize=4096m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
修改完成后重新执行npm run android即可正常构建。
小提示:修改后如果仍报错,可执行cd android && ./gradlew clean清空项目Gradle缓存后再重新构建
方案2:降级JDK版本(适配低版本React Native项目)
如果项目使用的React Native版本低于0.67,对高版本JDK兼容性较差,可以降级安装JDK 8,安装完成后配置好JAVA_HOME环境变量指向JDK 8的安装路径,即可兼容MaxPermSize参数。
方案3:全局配置Gradle JVM参数(多项目共用场景)
如果你本地有多个React Native项目都遇到相同问题,不想逐个修改项目配置,可以在用户根目录下的.gradle/gradle.properties文件中添加/修改jvmargs配置,移除MaxPermSize参数即可全局生效。
内容的提问来源于stack exchange,提问作者Mohammed Mudassir

