From 9b4ba4f51e01ff350b971e8321ced57fdc0d27c6 Mon Sep 17 00:00:00 2001 From: "Srirang.Kalantri" Date: Tue, 16 Jun 2026 18:33:32 +0530 Subject: [PATCH 1/2] fix: open dev tools option accessible --- android/app/src/main/AndroidManifest.xml | 1 + android/app/src/main/res/xml/network_security_config.xml | 9 +++++++++ .../developerapp/mendixapp/MendixProjectFragmentBase.kt | 5 +++++ 3 files changed, 15 insertions(+) create mode 100644 android/app/src/main/res/xml/network_security_config.xml diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index e136e209..7d4aed03 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -86,6 +86,7 @@ android:requestLegacyExternalStorage="true" android:theme="@style/Theme.MakeItNative" android:usesCleartextTraffic="true" + android:networkSecurityConfig="@xml/network_security_config" tools:ignore="GoogleAppIndexingWarning" tools:targetApi="28" android:supportsRtl="true"> diff --git a/android/app/src/main/res/xml/network_security_config.xml b/android/app/src/main/res/xml/network_security_config.xml new file mode 100644 index 00000000..bf83b92b --- /dev/null +++ b/android/app/src/main/res/xml/network_security_config.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/android/app/src/production/java/com/mendix/developerapp/mendixapp/MendixProjectFragmentBase.kt b/android/app/src/production/java/com/mendix/developerapp/mendixapp/MendixProjectFragmentBase.kt index 11a106f0..936a758a 100644 --- a/android/app/src/production/java/com/mendix/developerapp/mendixapp/MendixProjectFragmentBase.kt +++ b/android/app/src/production/java/com/mendix/developerapp/mendixapp/MendixProjectFragmentBase.kt @@ -25,6 +25,11 @@ open class MendixProjectFragmentBase : MendixBaseFragment() { viewModel.status.observe(viewLifecycleOwner) { if (it === ProjectLoaderViewModel.STATUS_SUCCESS) { + // Surface RN's "Open DevTools" item in the dev menu. isDeviceDebugEnabled + // defaults to ReactBuildConfig.DEBUG (false in release) and is in-memory only, + // so it must be set each launch once the React instance (and thus the + // DevSupportManager) exists. Safely no-ops when dev support is off (devSettings null). + currentDevSupportManager?.devSettings?.isDeviceDebugEnabled = true RNBootSplash.init(requireActivity(), R.style.BootTheme) }else{ RNBootSplash.hide(requireActivity()); From f010d10cf2f2f66f20e3f2fdf3e556b6096f04fa Mon Sep 17 00:00:00 2001 From: "Srirang.Kalantri" Date: Fri, 19 Jun 2026 17:39:16 +0530 Subject: [PATCH 2/2] fix: debugger window opening --- android/app/src/main/AndroidManifest.xml | 1 - .../main/res/xml/network_security_config.xml | 9 ------- .../mendix/developerapp/MainApplication.kt | 27 +++++++++++++++++++ 3 files changed, 27 insertions(+), 10 deletions(-) delete mode 100644 android/app/src/main/res/xml/network_security_config.xml diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 7d4aed03..e136e209 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -86,7 +86,6 @@ android:requestLegacyExternalStorage="true" android:theme="@style/Theme.MakeItNative" android:usesCleartextTraffic="true" - android:networkSecurityConfig="@xml/network_security_config" tools:ignore="GoogleAppIndexingWarning" tools:targetApi="28" android:supportsRtl="true"> diff --git a/android/app/src/main/res/xml/network_security_config.xml b/android/app/src/main/res/xml/network_security_config.xml deleted file mode 100644 index bf83b92b..00000000 --- a/android/app/src/main/res/xml/network_security_config.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/android/app/src/production/java/com/mendix/developerapp/MainApplication.kt b/android/app/src/production/java/com/mendix/developerapp/MainApplication.kt index 59816bbf..7a5a4a2b 100644 --- a/android/app/src/production/java/com/mendix/developerapp/MainApplication.kt +++ b/android/app/src/production/java/com/mendix/developerapp/MainApplication.kt @@ -1,6 +1,8 @@ package com.mendix.developerapp import com.facebook.react.devsupport.interfaces.DevBundleDownloadListener +import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags +import com.facebook.react.internal.featureflags.ReactNativeNewArchitectureFeatureFlagsDefaults import com.mendix.developerapp.loading.BundleDownloadListenerHolder import com.mendix.developerapp.sampelapps.SampleAppsManager import com.mendix.developerapp.splashscreen.SplashScreenPresenter @@ -18,6 +20,31 @@ class MainApplication : BaseApplication() { var splashImagePath = splashBackground(backgroundImage) } + override fun onCreate() { + // MendixReactApplication.onCreate() runs SoLoader.init() and then + // DefaultNewArchitectureEntryPoint.load(), which itself calls + // ReactNativeFeatureFlags.override(...) exactly once. So by the time we + // return from super.onCreate() the native lib is loaded AND the flags have + // already been overridden once. + super.onCreate() + + // Enable the React Native DevTools (Fusebox) CDP backend in release builds. + // In release, InspectorFlags reads ReactNativeFeatureFlags.fuseboxEnabledRelease() + // (defaults to false), which bakes a "legacy" vs "fusebox" inspector target id into + // the device registration. Without this, the dev menu's "Open DevTools" registers as + // a legacy target and Metro's /open-debugger can't find a fusebox target to open + // (silent no-op). We use dangerouslyForceOverride (not override) because the flags + // were already overridden by load(); a second override() would throw. This must run + // before the inspector first reads the flag (i.e. before connecting to the packager), + // which onCreate satisfies. We extend the New Architecture defaults so bridgeless / + // Fabric / TurboModules stay enabled. + ReactNativeFeatureFlags.dangerouslyForceOverride( + object : ReactNativeNewArchitectureFeatureFlagsDefaults() { + override fun fuseboxEnabledRelease(): Boolean = true + } + ) + } + val bundleDownloadListenerHolder = BundleDownloadListenerHolder() override val devBundleDownloadListener: DevBundleDownloadListener