Headless Linux generation proof. Expo58.0.14 / ReactNative0.88.0. Full command: CI=1 EXPO_NO_DOTENV=1 APP_VARIANT=preview pnpm exec expo prebuild --clean --platform android --no-install : exit0. Full MainActivity contains1 setContentView override,1 configuration override,2 rebindcalls, preservedtabletpolicy. Comparison: installedExpo template plus actual app plugin list andMainActivitymodchain, with densityplugin registrationdisabled/enabled (no trackedsourcechanged). [ { "revision": "before", "rootOverride": 0, "configOverride": 1, "rebindCalls": 0, "orientationPreserved": true }, { "revision": "after", "rootOverride": 1, "configOverride": 1, "rebindCalls": 2, "orientationPreserved": true } ] --- plugin-disabled-MainActivity.kt +++ plugin-enabled-MainActivity.kt @@ -4,6 +4,9 @@ import android.os.Build import android.os.Bundle import androidx.activity.OnBackPressedCallback +import com.facebook.react.uimanager.DisplayMetricsHolder +import android.view.View +import android.util.DisplayMetrics import android.content.pm.ActivityInfo import android.content.res.Configuration @@ -26,10 +29,29 @@ } } + // Keep deprecated APIs to match React Native screen metrics on Android 24+. + // Physical display metrics omit the configured font scale. + @Suppress("DEPRECATION") + private fun bindWindowDisplayMetrics() { + val windowMetrics = resources.displayMetrics + val metrics = DisplayMetrics() + metrics.setTo(windowMetrics) + windowManager.defaultDisplay.getRealMetrics(metrics) + metrics.scaledDensity = windowMetrics.scaledDensity + DisplayMetricsHolder.setScreenDisplayMetrics(metrics) + } + + // Expo constructs the root view after onCreate; its constructor resets metrics. + override fun setContentView(view: View?) { + super.setContentView(view) + bindWindowDisplayMetrics() + } + // Applied in onCreate and re-applied on fold/unfold; added by // withAndroidTabletOrientation. override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) + bindWindowDisplayMetrics() applyTabletOrientation() } Focusedtests6pass; mobiletypecheck/scopedlint/formatpass. No Kotlincompile/device/PixelDesktop/DeX/native runtime verification. Author images are historical originalheadproof only.