diff --git a/ReactAndroid/build.gradle b/ReactAndroid/build.gradle index 5a384f23c12..36c4f83347a 100644 --- a/ReactAndroid/build.gradle +++ b/ReactAndroid/build.gradle @@ -287,6 +287,10 @@ android { ndkVersion System.getenv("LOCAL_ANDROID_NDK_VERSION") } + if (ndkVersion == null && ndkPath == null && rootProject.ext.ndkVersion != null) { + ndkVersion rootProject.ext.ndkVersion + } + defaultConfig { minSdkVersion(21) targetSdkVersion(31) @@ -318,6 +322,14 @@ android { // This flag will suppress "fcntl(): Bad file descriptor" warnings on local builds. arguments "--output-sync=none" } + + // Note: On Windows there are limits on number of character in file paths and in command lines + // Ref: https://android.googlesource.com/platform/ndk/+/master/docs/BuildSystemMaintainers.md#Path-Length-Limits + // NDK r23+ can handle long file paths. But we are still limited by the command line limit on Windows. + if (Os.isFamily(Os.FAMILY_WINDOWS)) { + arguments "NDK_OUT=${rootProject.projectDir}\\.cxx", + "NDK_APP_SHORT_COMMANDS=true" + } } } ndk { diff --git a/template/android/app/build.gradle b/template/android/app/build.gradle index a173c56b4e9..fd4e5fae3b2 100644 --- a/template/android/app/build.gradle +++ b/template/android/app/build.gradle @@ -1,6 +1,7 @@ apply plugin: "com.android.application" import com.android.build.OutputFile +import org.apache.tools.ant.taskdefs.condition.Os /** * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets @@ -157,6 +158,12 @@ android { // Make sure this target name is the same you specify inside the // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable. targets "helloworld_appmodules" + + // Fix for windows limit on number of character in file paths and in command lines + if (Os.isFamily(Os.FAMILY_WINDOWS)) { + arguments "NDK_OUT=${rootProject.projectDir}\\.cxx", + "NDK_APP_SHORT_COMMANDS=true" + } } } } diff --git a/template/android/build.gradle b/template/android/build.gradle index 8a1d68f9c5c..14d16ce93dc 100644 --- a/template/android/build.gradle +++ b/template/android/build.gradle @@ -1,3 +1,5 @@ +import org.apache.tools.ant.taskdefs.condition.Os + // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { @@ -6,7 +8,15 @@ buildscript { minSdkVersion = 21 compileSdkVersion = 31 targetSdkVersion = 31 - ndkVersion = "21.4.7075529" + + if (Os.isFamily(Os.FAMILY_WINDOWS)) { + // Note: On Windows there are limits on number of character in file paths and command lines + // Ref: https://android.googlesource.com/platform/ndk/+/master/docs/BuildSystemMaintainers.md#Path-Length-Limits + // NDK r23+ can handle long file paths. But we are still limited by the command line limit on Windows. + ndkVersion = "23.1.7779620" + } else { + ndkVersion = "21.4.7075529" + } } repositories { google()