diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java
index 2f580dafa99..da07ff09f44 100644
--- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java
+++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java
@@ -61,6 +61,7 @@ import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags;
import com.facebook.react.modules.appearance.AppearanceModule;
import com.facebook.react.modules.core.DefaultHardwareBackBtnHandler;
import com.facebook.react.modules.core.DeviceEventManagerModule;
+import com.facebook.react.modules.systeminfo.AndroidInfoHelpers;
import com.facebook.react.runtime.internal.bolts.Task;
import com.facebook.react.runtime.internal.bolts.TaskCompletionSource;
import com.facebook.react.turbomodule.core.interfaces.CallInvokerHolder;
@@ -73,6 +74,7 @@ import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
@@ -90,6 +92,7 @@ import kotlin.jvm.functions.Function0;
*
* @see Bolts Android
*/
+@DoNotStrip
@ThreadSafe
@Nullsafe(Nullsafe.Mode.LOCAL)
public class ReactHostImpl implements ReactHost {
@@ -498,6 +501,11 @@ public class ReactHostImpl implements ReactHost {
}
}
+ @DoNotStrip
+ private Map getHostMetadata() {
+ return AndroidInfoHelpers.getInspectorHostMetadata(mContext);
+ }
+
/**
* Entrypoint to destroy the ReactInstance. If the ReactInstance is reloading, will wait until
* reload is finished, before destroying.
diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp b/packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp
index c1335b40a61..2ad9e1042b7 100644
--- a/packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp
+++ b/packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp
@@ -88,9 +88,28 @@ void JReactHostInspectorTarget::registerNatives() {
jsinspector_modern::HostTargetMetadata
JReactHostInspectorTarget::getMetadata() {
- return {
+ jsinspector_modern::HostTargetMetadata metadata = {
.integrationName = "Android Bridgeless (ReactHostImpl)",
};
+
+ if (auto javaReactHostImplStrong = javaReactHostImpl_->get()) {
+ auto javaMetadata = javaReactHostImplStrong->getHostMetadata();
+ auto getMethod = jni::JMap::javaClassLocal()
+ ->getMethod("get");
+
+ auto getStringOptional = [&](const std::string& key) {
+ auto result = getMethod(javaMetadata, make_jstring(key).get());
+ return result ? std::optional(result->toString())
+ : std::nullopt;
+ };
+
+ metadata.appIdentifier = getStringOptional("appIdentifier");
+ metadata.deviceName = getStringOptional("deviceName");
+ metadata.platform = getStringOptional("platform");
+ metadata.reactNativeVersion = getStringOptional("reactNativeVersion");
+ }
+
+ return metadata;
}
void JReactHostInspectorTarget::onReload(const PageReloadRequest& request) {
diff --git a/packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h b/packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h
index b68ecd735ae..6aa4bbea829 100644
--- a/packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h
+++ b/packages/react-native/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h
@@ -36,6 +36,14 @@ struct JReactHostImpl : public jni::JavaClass {
"setPausedInDebuggerMessage");
method(self(), message ? jni::make_jstring(*message) : nullptr);
}
+
+ jni::local_ref> getHostMetadata() const {
+ static auto method =
+ javaClassStatic()
+ ->getMethod>()>(
+ "getHostMetadata");
+ return method(self());
+ }
};
class JReactHostInspectorTarget