From 256b068abb38ef22e6a219effa63a151cdf09867 Mon Sep 17 00:00:00 2001 From: ranjith Date: Fri, 28 Nov 2025 21:38:48 +0530 Subject: [PATCH] WMS-29754 | introduce --gradle-memory flag for Gradle JVM and memory configuration --- README.md | 2 ++ index.js | 10 ++++++++++ src/command.js | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+) diff --git a/README.md b/README.md index ad44451..95bfd3e 100644 --- a/README.md +++ b/README.md @@ -81,6 +81,8 @@ wm-reactnative build android [additional_arguments] |**\-\-aKeyPassword**|Key Password| |**\-\-buildType**|**DEFAULT:** development
development or production
Use ‘production’ with keystore specified.| |**\-\-architecture**|Specifies the target Application Binary Interfaces (ABIs) for the build.
**DEFAULT:** All
**CHOICES:** armeabi-v7a, arm64-v8a, x86, x86_64.
**Example for single ABI:** --architecture=armeabi-v7a
**Example for multiple ABIs:** --architecture=armeabi-v7a --architecture=arm64-v8a | +|**\-\-gradle-memory-xmx**|**OPTIONAL:** Specify JVM heap size for Gradle daemon in MB.
**Example:** --gradle-memory-xmx=2048| +|**\-\-gradle-max-metaspace-size**|**OPTIONAL:** Specify JVM max metaspace size for Gradle daemon in MB.
**Example:** --gradle-max-metaspace-size=512| ### Example 1 diff --git a/index.js b/index.js index 811e9c0..bf299be 100755 --- a/index.js +++ b/index.js @@ -79,6 +79,16 @@ const args = require('yargs') type: 'array', choices: ['armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'], }) + .option('gradle-memory-xmx', { + alias: 'gmx', + describe: 'Specify JVM heap size for Gradle daemon in MB (e.g., 2048)', + type: 'number' + }) + .option('gradle-max-metaspace-size', { + alias: 'gmms', + describe: 'Specify JVM max metaspace size for Gradle daemon in MB (e.g., 512)', + type: 'number' + }) }, args => { args.platform = 'android'; if(args.interactive){ diff --git a/src/command.js b/src/command.js index 6157478..7d8842e 100644 --- a/src/command.js +++ b/src/command.js @@ -152,6 +152,39 @@ async function updatePackageJsonFile(path) { }) } + if ((args.gradleMemoryXmx || args.gradleMaxMetaspaceSize) && args.platform === 'android') { + await readAndReplaceFileContent(`${config.src}/android/gradle.properties`, content => { + let jvmArgsLine = (content.match(/^org\.gradle\.jvmargs=(.*)$/m) || [])[1]; + + if (jvmArgsLine) { + if (args.gradleMemoryXmx) { + if (jvmArgsLine.match(/-Xmx\d+[gmkGMK]?/)) { + jvmArgsLine = jvmArgsLine.replace(/-Xmx\d+[gmkGMK]?/, `-Xmx${args.gradleMemoryXmx}m`); + } else { + jvmArgsLine += ` -Xmx${args.gradleMemoryXmx}m`; + } + } + if (args.gradleMaxMetaspaceSize) { + if (jvmArgsLine.match(/-XX:MaxMetaspaceSize=\d+[gmkGMK]?/)) { + jvmArgsLine = jvmArgsLine.replace(/-XX:MaxMetaspaceSize=\d+[gmkGMK]?/, `-XX:MaxMetaspaceSize=${args.gradleMaxMetaspaceSize}m`); + } else { + jvmArgsLine += ` -XX:MaxMetaspaceSize=${args.gradleMaxMetaspaceSize}m`; + } + } + return content.replace(/^org\.gradle\.jvmargs=.*$/m, `org.gradle.jvmargs=${jvmArgsLine.trim()}`); + } else { + let newArgs = ''; + if (args.gradleMemoryXmx) { + newArgs += `-Xmx${args.gradleMemoryXmx}m `; + } + if (args.gradleMaxMetaspaceSize) { + newArgs += `-XX:MaxMetaspaceSize=${args.gradleMaxMetaspaceSize}m`; + } + return content + `\norg.gradle.jvmargs=${newArgs.trim()}`; + } + }); + } + config.outputDirectory = config.src + 'output/'; config.logDirectory = config.outputDirectory + 'logs/'; logger.info({