facebook / react-native

A framework for building native applications using React
https://reactnative.dev
MIT License
118.55k stars 24.28k forks source link

AndroidRuntime: FATAL EXCEPTION: mqt_native_modules #38342

Closed justinmooresystem1 closed 1 year ago

justinmooresystem1 commented 1 year ago

New Version

0.64.3

Old Version

0.63.4

Build Target(s)

Android local build and run in device emulator

Output of react-native info

System:
    OS: macOS 13.1
    CPU: (16) x64 Intel(R) Core(TM) i9-9980HK CPU @ 2.40GHz
    Memory: 1.95 GB / 32.00 GB
    Shell: 5.8.1 - /bin/zsh
  Binaries:
    Node: 18.16.0 - ~/.nvm/versions/node/v18.16.0/bin/node
    Yarn: 1.22.19 - /usr/local/bin/yarn
    npm: 8.0.0 - ~/.nvm/versions/node/v18.16.0/bin/npm
    Watchman: 2023.06.12.00 - /usr/local/bin/watchman
  Managers:
    CocoaPods: Not Found
  SDKs:
    iOS SDK: Not Found
    Android SDK: Not Found
  IDEs:
    Android Studio: 2021.2 AI-212.5712.43.2112.8609683
    Xcode: /undefined - /usr/bin/xcodebuild
  Languages:
    Java: 11.0.12 - /usr/bin/javac
  npmPackages:
    @react-native-community/cli: Not Found
    react: 17.0.1 => 17.0.1 
    react-native: 0.64.3 => 0.64.3 
    react-native-macos: Not Found
  npmGlobalPackages:
    *react-native*: Not Found

Issue and Reproduction Steps

After upgrading Expo 42 to Expo 43 (which upgraded react native from 0.63.4 to 0.64.3), I am able to start my devices emulator in Android Studio but when my app opens it immediately crashes with the error

2023-07-13 11:08:41.468 4122-4175/info.com.pwa.debug E/AndroidRuntime: FATAL EXCEPTION: mqt_native_modules
    Process: info.com.pwa.debug, PID: 4122
    com.facebook.react.common.JavascriptException: TypeError: null is not an object (evaluating 't.requestUpdate'), stack:
    <unknown>@1296:293
    v@2:1473
    <unknown>@481:388
    v@2:1473
    <unknown>@6:69
    v@2:1473
    d@2:875
    global code@1298:3
        at com.facebook.react.modules.core.ExceptionsManagerModule.reportException(ExceptionsManagerModule.java:83)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.facebook.react.bridge.JavaMethodWrapper.invoke(JavaMethodWrapper.java:372)
        at com.facebook.react.bridge.JavaModuleWrapper.invoke(JavaModuleWrapper.java:151)
        at com.facebook.react.bridge.queue.NativeRunnable.run(Native Method)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at com.facebook.react.bridge.queue.MessageQueueThreadHandler.dispatchMessage(MessageQueueThreadHandler.java:27)
        at android.os.Looper.loop(Looper.java:223)
        at com.facebook.react.bridge.queue.MessageQueueThreadImpl$4.run(MessageQueueThreadImpl.java:226)
        at java.lang.Thread.run(Thread.java:923)

I cannot for the life of my figure out how to fix this error and I could use some help

Here is my package.json

{
  "name": "@s1/info-expo",
  "version": "1.4.7",
  "license": "UNLICENSED",
  "repository": {
    "type": "git",
    "url": "https://github.com/openmail/openmail"
  },
  "scripts": {
    "android": "react-native run-android --variant=debug --appIdSuffix=debug",
    "dev": "adb reverse tcp:8081 tcp:8081 && npm run start",
    "lint": "npm run lint:js && tsc",
    "lint:fix": "npm run lint:js -- --fix",
    "lint:js": "eslint '**/*.[tj]s*(x)' '*.[tj]s*(x)' --max-warnings=0 --ignore-path ../../.eslintignore",
    "postpublish": "npm run publish:stage",
    "publish:js": "npm run expo:login && npm run secrets:android && expo publish -c -t bare --release-channel",
    "publish:js:prod": "npm run publish:js -- prod",
    "publish:prod": "env ENVIRONMENT=prod ./scripts/publish.sh",
    "publish:stage": "env ENVIRONMENT=stage ./scripts/publish.sh",
    "secrets:android": "./scripts/getAndroidSecret.js && expo fetch:android:keystore",
    "start": "react-native start --reset-cache",
    "test": "jest",
    "tsc": "tsc"
  },
  "dependencies": {
    "@react-native-async-storage/async-storage": "~1.15.0",
    "@react-native-community/netinfo": "6.0.2",
    "@react-native-community/voice": "1.1.9",
    "@react-native-firebase/analytics": "7.6.4",
    "@react-native-firebase/app": "8.4.3",
    "@react-native-masked-view/masked-view": "0.2.5",
    "@react-navigation/core": "^6.4.8",
    "@react-navigation/material-top-tabs": "6.0.0",
    "@react-navigation/native": "6.0.0",
    "@react-navigation/stack": "6.0.0",
    "@reduxjs/toolkit": "^1.3.6",
    "@rnhooks/keyboard": "0.0.3",
    "@s1/dpl": "3.0.17",
    "change-case": "^4.1.1",
    "escape-string-regexp": "2.0.0",
    "expo": "^43.0.0",
    "expo-application": "~4.0.0",
    "expo-asset": "~8.4.3",
    "expo-av": "~10.1.3",
    "expo-constants": "~12.1.3",
    "expo-intent-launcher": "~10.0.3",
    "expo-localization": "~11.0.0",
    "expo-network": "~4.0.3",
    "expo-splash-screen": "~0.13.5",
    "expo-updates": "~0.10.15",
    "i18next": "^19.4.4",
    "react": "17.0.1",
    "react-dom": "17.0.1",
    "react-i18next": "^11.4.0",
    "react-is": "^18.2.0",
    "react-native": "0.64.3",
    "react-native-device-info": "5.5.8",
    "react-native-gesture-handler": "~1.10.2",
    "react-native-offline": "^6.0.0",
    "react-native-pager-view": "5.4.6",
    "react-native-paper": "4.2.0",
    "react-native-reanimated": "~2.2.0",
    "react-native-responsive-dimensions": "^3.1.1",
    "react-native-safe-area-context": "3.3.2",
    "react-native-screens": "~3.8.0",
    "react-native-startup-time": "^1.2.2",
    "react-native-svg": "12.1.1",
    "react-native-tab-view": "3.0.0",
    "react-native-url-polyfill": "^1.1.2",
    "react-native-vector-icons": "^6.6.0",
    "react-native-web": "0.17.1",
    "react-native-webview": "11.13.0",
    "react-redux": "^7.2.0",
    "redux": "^4.0.5",
    "redux-devtools-extension": "^2.13.8",
    "redux-persist": "^6.0.2",
    "redux-thunk": "^2.3.0",
    "styled-components": "^5.1.0",
    "url-regex": "^5.0.0"
  },
  "devDependencies": {
    "@babel/core": "^7.12.9",
    "@babel/plugin-transform-async-to-generator": "7.10.1",
    "@carimus/metro-symlinked-deps": "1.1.0",
    "@google-cloud/translate": "^5.1.4",
    "@testing-library/react-hooks": "3.2.1",
    "@testing-library/react-native": "5.0.3",
    "@types/jest": "^25.2.3",
    "@types/node": "^14.0.4",
    "@types/react": "~17.0.21",
    "@types/react-native": "~0.64.12",
    "@types/react-native-responsive-dimensions": "3.0.0",
    "@types/react-redux": "^7.1.6",
    "@types/react-test-renderer": "^16.9.1",
    "@types/styled-components": "^4.4.2",
    "@types/yargs": "13.0.4",
    "aws-sdk": "^2.671.0",
    "babel-preset-expo": "8.5.1",
    "eslint": "6.8.0",
    "expo-cli": "4.12.8",
    "expo-optimize": "^0.1.23",
    "expo-web-browser": "~10.0.3",
    "jest-expo": "~43.0.1",
    "npm-run-all": "4.1.5",
    "react-native-svg-transformer": "^0.14.3",
    "react-native-testing-library": "^1.12.0",
    "react-test-renderer": "16.10.1",
    "sharp-cli": "^1.10.0",
    "shelljs": "^0.8.3",
    "ts-jest": "^26.0.0",
    "typescript": "~4.3.5",
    "webpack": "^4.43.0",
    "webpack-dev-server": "^3.10.3",
    "yargs": "15.0.2"
  }
}

My android/build.gradle

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    ext {
        buildToolsVersion = "30.0.3"
        minSdkVersion = 21
        compileSdkVersion = 31
        googlePlayServicesVersion = '16.0.0'
        targetSdkVersion = 31
        kotlinVersion = '1.5.31'
        androidToolsVersion = '4.1.3'
        androidXCore = "1.5.0"
    }
    repositories {
        google()
        mavenCentral()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:$androidToolsVersion"
        classpath 'com.google.gms:google-services:4.2.0'
        classpath 'de.undercouch:gradle-download-task:3.4.3'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlinVersion"
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

def REACT_NATIVE_VERSION = new File(
    [
        'node',
        '--print',
        "JSON.parse(require('fs').readFileSync(require.resolve('react-native/package.json'), 'utf-8')).version"
    ].execute(null, rootDir).text.trim()
)

allprojects {
    allprojects {
        configurations.all {
            resolutionStrategy {
                force "com.facebook.react:react-native:" + REACT_NATIVE_VERSION
            }
        }
    }

    repositories {
        mavenLocal()
        maven {
            url(new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../android"))
        }
        maven {
            url(new File(["node", "--print", "require.resolve('jsc-android/package.json')"].execute(null, rootDir).text.trim(), "../dist"))
        }

        google()
        mavenCentral()
        jcenter()
        maven { url 'https://www.jitpack.io' }
      }
}

Here is my Android.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  package="info.com.pwa"
>
  <permission android:name="${applicationId}.permission.C2D_MESSAGE" android:protectionLevel="signature"/>
  <!-- These are required permissions to make the app run -->
  <uses-permission android:name="${applicationId}.permission.C2D_MESSAGE"/>
  <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
  <uses-permission android:name="android.permission.WAKE_LOCK"/>
  <uses-permission android:name="android.permission.RECORD_AUDIO"/>
  <!-- ADD PERMISSIONS HERE -->
  <!-- BEGIN OPTIONAL PERMISSIONS -->
  <uses-permission
    android:name="android.permission.MANAGE_DOCUMENTS"
    tools:ignore="ProtectedPermissions"
    tools:node="remove"
  />
  <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" tools:node="remove"/>
  <uses-permission android:name="android.permission.USE_FINGERPRINT" tools:node="remove"/>
  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" tools:node="remove"/>
  <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" tools:node="remove"/>
  <!-- These require runtime permissions on M -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" tools:node="remove"/>
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" tools:node="remove"/>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" tools:node="remove"/>
  <uses-permission android:name="android.permission.CAMERA" tools:node="remove"/>
  <uses-permission android:name="android.permission.READ_CONTACTS" tools:node="remove"/>
  <uses-permission android:name="android.permission.READ_CALENDAR" tools:node="remove"/>
  <uses-permission android:name="android.permission.WRITE_CALENDAR" tools:node="remove"/>
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" tools:node="remove"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:node="remove"/>
  <!-- ADD TEST PERMISSIONS HERE -->
  <uses-feature android:glEsVersion="0x00020000" android:required="false"/>
  <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
  <application
    android:name=".InfoMainApplication"
    android:label="@string/app_name"
    android:icon="@mipmap/ic_launcher"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:allowBackup="false"
  >
    <meta-data android:name="expo.modules.updates.EXPO_UPDATE_URL" android:value="https://exp.host/@system1/info-expo" />
    <meta-data android:name="expo.modules.updates.EXPO_SDK_VERSION" android:value="42.0.0" />
    <meta-data android:name="expo.modules.updates.EXPO_UPDATES_ENABLED" android:value="true"/>
    <activity-alias
      android:name="info.com.pwa.intent.SearchRequestReceiver"
      android:enabled="true"
      android:exported="true"
      android:label="Text Search"
      android:targetActivity="info.com.pwa.SearchRequestReceiver"
    >
      <intent-filter>
        <data android:scheme="info"/>
        <action android:name="info.com.pwa.intent.SEARCH"/>
      </intent-filter>
    </activity-alias>
    <activity
      android:name=".SearchRequestReceiver"
      android:exported="true"
      android:theme="@android:style/Theme.Translucent.NoTitleBar"
    />
    <meta-data android:name="expo.modules.updates.EXPO_RELEASE_CHANNEL" android:value="prod" />
    <activity
      android:name=".MainActivity"
      android:exported="true"
      android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
      android:launchMode="singleTask"
      android:windowSoftInputMode="adjustResize"
      android:theme="@style/Theme.App.SplashScreen"
    >
      <intent-filter>
        <data android:scheme="info"/>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
      </intent-filter>
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
      <intent-filter>
        <data android:scheme="info://"/>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <category android:name="android.intent.category.DEFAULT"/>
      </intent-filter>
    </activity>
    <meta-data android:name="stage" android:value="false"/>
  </application>
</manifest>

Here is my app/build.gradle

apply plugin: "com.android.application"
apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services'

import com.android.build.OutputFile

/**
 * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
 * and bundleReleaseJsAndAssets).
 * These basically call `react-native bundle` with the correct arguments during the Android build
 * cycle. By default, bundleDebugJsAndAssets is skipped, as in debug/dev mode we prefer to load the
 * bundle directly from the development server. Below you can see all the possible configurations
 * and their defaults. If you decide to add a configuration block, make sure to add it before the
 * `apply from: "../../node_modules/react-native/react.gradle"` line.
 *
 * project.ext.react = [
 *   // the name of the generated asset file containing your JS bundle
 *   bundleAssetName: "index.android.bundle",
 *
 *   // the entry file for bundle generation
 *   entryFile: "index.android.js",
 *
 *   // https://reactnative.dev/docs/performance#enable-the-ram-format
 *   bundleCommand: "ram-bundle",
 *
 *   // whether to bundle JS and assets in debug mode
 *   bundleInDebug: false,
 *
 *   // whether to bundle JS and assets in release mode
 *   bundleInRelease: true,
 *
 *   // whether to bundle JS and assets in another build variant (if configured).
 *   // See http://tools.android.com/tech-docs/new-build-system/user-guide#TOC-Build-Variants
 *   // The configuration property can be in the following formats
 *   //         'bundleIn${productFlavor}${buildType}'
 *   //         'bundleIn${buildType}'
 *   // bundleInFreeDebug: true,
 *   // bundleInPaidRelease: true,
 *   // bundleInBeta: true,
 *
 *   // whether to disable dev mode in custom build variants (by default only disabled in release)
 *   // for example: to disable dev mode in the staging build type (if configured)
 *   devDisabledInStaging: true,
 *   // The configuration property can be in the following formats
 *   //         'devDisabledIn${productFlavor}${buildType}'
 *   //         'devDisabledIn${buildType}'
 *
 *   // the root of your project, i.e. where "package.json" lives
 *   root: "../../",
 *
 *   // where to put the JS bundle asset in debug mode
 *   jsBundleDirDebug: "$buildDir/intermediates/assets/debug",
 *
 *   // where to put the JS bundle asset in release mode
 *   jsBundleDirRelease: "$buildDir/intermediates/assets/release",
 *
 *   // where to put drawable resources / React Native assets, e.g. the ones you use via
 *   // require('./image.png')), in debug mode
 *   resourcesDirDebug: "$buildDir/intermediates/res/merged/debug",
 *
 *   // where to put drawable resources / React Native assets, e.g. the ones you use via
 *   // require('./image.png')), in release mode
 *   resourcesDirRelease: "$buildDir/intermediates/res/merged/release",
 *
 *   // by default the gradle tasks are skipped if none of the JS files or assets change; this means
 *   // that we don't look at files in android/ or ios/ to determine whether the tasks are up to
 *   // date; if you have any other folders that you want to ignore for performance reasons (gradle
 *   // indexes the entire tree), add them here. Alternatively, if you have JS files in android/
 *   // for example, you might want to remove it from here.
 *   inputExcludes: ["android/**", "ios/**"],
 *
 *   // override which node gets called and with what additional arguments
 *   nodeExecutableAndArgs: ["node"],
 *
 *   // supply additional arguments to the packager
 *   extraPackagerArgs: []
 * ]
 */

project.ext.react = [
    entryFile: "index.js",
    enableHermes: (findProperty('expo.jsEngine') ?: "jsc") == "hermes",
    bundleInRelease: true,
    bundleInStage: true,
    bundleInDebug: true,
    devDisabledInStage: false,
    cliPath: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/cli.js",
    hermesCommand: new File(["node", "--print", "require.resolve('hermes-engine/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/%OS-BIN%/hermesc",
    composeSourceMapsPath: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim()).getParentFile().getAbsolutePath() + "/scripts/compose-source-maps.js",
]

apply from: new File(["node", "--print", "require.resolve('react-native/package.json')"].execute(null, rootDir).text.trim(), "../react.gradle")

/**
 * Set this to true to create two separate APKs instead of one:
 *   - An APK that only works on ARM devices
 *   - An APK that only works on x86 devices
 * The advantage is the size of the APK is reduced by about 4MB.
 * Upload all the APKs to the Play Store and people will download
 * the correct one based on the CPU architecture of their device.
 */
def enableSeparateBuildPerCPUArchitecture = false

/**
 * Run Proguard to shrink the Java bytecode in release builds.
 */
def enableProguardInReleaseBuilds = false

/**
 * The preferred build flavor of JavaScriptCore.
 *
 * For example, to use the international variant, you can use:
 * `def jscFlavor = 'org.webkit:android-jsc-intl:+'`
 *
 * The international variant includes ICU i18n library and necessary data
 * allowing to use e.g. `Date.toLocaleString` and `String.localeCompare` that
 * give correct results when using with locales other than en-US.  Note that
 * this variant is about 6MiB larger per architecture than default.
 */
def jscFlavor = 'org.webkit:android-jsc:+'

/**
 * Whether to enable the Hermes VM.
 *
 * This should be set on project.ext.react and mirrored here.  If it is not set
 * on project.ext.react, JavaScript will not be compiled to Hermes Bytecode
 * and the benefits of using Hermes will therefore be sharply reduced.
 */
def enableHermes = project.ext.react.get("enableHermes", true);

// versionCode has to be greater than the original Java version of the app and less than 2100000000
// https://developer.android.com/studio/publish/versioning.html#appversioning
def appVersionCode = 1911111109 + Integer.valueOf(System.env.BUILD_NUMBER ?: 0)

def safeExtGet(prop, fallback) {
    rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
}

def safePropGet(prop, fallback) {
    project.hasProperty(prop) ? project.findProperty(prop) : fallback
}

android {
    compileSdkVersion 31

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    dexOptions {
        javaMaxHeapSize "3g"
    }

    defaultConfig {
        applicationId 'info.com.pwa'
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode safePropGet("versionCode", appVersionCode) as Integer
        versionName safePropGet("versionName", "1.0.0")
    }
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false  // If true, also generate a universal APK
            include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
        }
    }
    signingConfigs {
        debug {
            storeFile file('debug.keystore')
            storePassword 'android'
            keyAlias 'androiddebugkey'
            keyPassword 'android'
        }
        release {
            storeFile file(System.getenv("ANDROID_KEYSTORE_PATH") ?: "../../info-expo.jks")
            storePassword 'systemone'
            keyAlias 'info'
            keyPassword 'systemone'
        }
    }
    buildTypes {
        debug {
            signingConfig signingConfigs.debug
            applicationIdSuffix = ".debug"
        }
        release {
            minifyEnabled enableProguardInReleaseBuilds
            proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
            consumerProguardFiles 'proguard-rules.pro'
            signingConfig signingConfigs.release
        }
        stage {
            initWith release
            buildConfigField("String", "RELEASE_CHANNEL", "\"stage\"")
            manifestPlaceholders = [stage: true]
            matchingFallbacks = ['release']
            signingConfig signingConfigs.debug
        }
    }

    configurations.all {
        resolutionStrategy {
            force "com.facebook.soloader:soloader:0.10.4"
        }
    }

    // applicationVariants are e.g. debug, release
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            // For each separate APK per architecture, set a unique version code as described here:
            // https://developer.android.com/studio/build/configure-apk-splits.html
            def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) {  // null for the universal-debug, universal-release variants
                output.versionCodeOverride =
                        versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }

        }
    }
}

dependencies {
    implementation fileTree(dir: "libs", include: ["*.jar"])
    implementation "com.facebook.react:react-native:+"  // From node_modules

    def isGifEnabled = (findProperty('expo.gif.enabled') ?: "") == "true";
    def isWebpEnabled = (findProperty('expo.webp.enabled') ?: "") == "true";
    def isWebpAnimatedEnabled = (findProperty('expo.webp.animated') ?: "") == "true";

    // If your app supports Android versions before Ice Cream Sandwich (API level 14)
    // All fresco packages should use the same version
    if (isGifEnabled || isWebpEnabled) {
        implementation 'com.facebook.fresco:fresco:2.0.0'
        implementation 'com.facebook.fresco:imagepipeline-okhttp3:2.0.0'
    }

    if (isGifEnabled) {
        // For animated gif support
        implementation 'com.facebook.fresco:animated-gif:2.0.0'
    }

    if (isWebpEnabled) {
        // For webp support
        implementation 'com.facebook.fresco:webpsupport:2.0.0'
        if (isWebpAnimatedEnabled) {
            // Animated webp support
            implementation 'com.facebook.fresco:animated-webp:2.0.0'
        }
    }

    // non-unimodule dependencies
    implementation 'androidx.appcompat:appcompat:1.1.0'
    implementation 'com.google.android.play:core:1.7.0'
    implementation 'com.jakewharton.timber:timber:4.7.1'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlinVersion"
    implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.0.0"

    if (enableHermes) {
        debugImplementation files(new File(["node", "--print", "require.resolve('hermes-engine/package.json')"].execute(null, rootDir).text.trim(), "../android/hermes-debug.aar"))
        releaseImplementation files(new File(["node", "--print", "require.resolve('hermes-engine/package.json')"].execute(null, rootDir).text.trim(), "../android/hermes-release.aar"))
    } else {
        implementation jscFlavor
    }
}

// Run this once to be able to run the application with BUCK
// puts all compile dependencies into folder libs for BUCK to use
task copyDownloadableDepsToLibs(type: Copy) {
    from configurations.compile
    into 'libs'
}

apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json')"].execute(null, rootDir).text.trim(), "../native_modules.gradle");
applyNativeModulesAppBuildGradle(project)

Here is my MainActivity

package info.com.pwa;

import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
import android.os.Bundle;
import com.facebook.react.ReactActivity;
import com.facebook.react.ReactActivityDelegate;
import com.facebook.react.ReactRootView;
import expo.modules.ReactActivityDelegateWrapper;

public class MainActivity extends ReactActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        setTheme(R.style.AppTheme);
        super.onCreate(savedInstanceState);
    }

    /**
     * Returns the name of the main component registered from JavaScript.
     * This is used to schedule rendering of the component.
     */
    @Override
    protected String getMainComponentName() {
        return "main";
    }

    @Override
    protected ReactActivityDelegate createReactActivityDelegate() {
        return new ReactActivityDelegateWrapper(
            this,
            new ReactActivityDelegate(this, getMainComponentName()) {
                @Override
                protected ReactRootView createRootView() {
                    return new RNGestureHandlerEnabledRootView(MainActivity.this);
                }
            }
        );
    }
}

Here is my MainApplication

package info.com.pwa;

import android.app.Application;
import android.content.Context;
import android.content.res.Configuration;
import androidx.annotation.NonNull;
import com.facebook.react.PackageList;
import com.facebook.react.BuildConfig;
import com.facebook.react.ReactApplication;
import com.facebook.react.ReactInstanceManager;
import com.facebook.react.ReactNativeHost;
import com.facebook.react.ReactPackage;
import com.facebook.react.bridge.JSIModulePackage;
import com.facebook.soloader.SoLoader;
import expo.modules.ApplicationLifecycleDispatcher;
import expo.modules.ReactNativeHostWrapper;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import com.swmansion.reanimated.ReanimatedJSIModulePackage;

/**
 * This app's actual application class is {@link InfoMainApplication}.
 * Implement buildType/flavor-specific behavior in that class.
 */
public class MainApplication extends Application implements ReactApplication {
    private final ReactNativeHost mReactNativeHost = new ReactNativeHostWrapper(
        this,
        new ReactNativeHost(this) {
            @Override
            public boolean getUseDeveloperSupport() {
                return BuildConfig.DEBUG;
            }

            @Override
            protected List<ReactPackage> getPackages() {
                @SuppressWarnings("UnnecessaryLocalVariable")
                List<ReactPackage> packages = new PackageList(this).getPackages();
                // Packages that cannot be auto-linked yet can be added manually here, for example:
                // packages.add(new MyReactNativePackage());
                return packages;
            }

            @Override
            protected String getJSMainModuleName() {
                return "index";
            }

            @Override
            protected JSIModulePackage getJSIModulePackage() {
                return new ReanimatedJSIModulePackage();
            }
        }
    );

    @Override
    public ReactNativeHost getReactNativeHost() {
        return mReactNativeHost;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        SoLoader.init(this, false);
        initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
        ApplicationLifecycleDispatcher.onApplicationCreate(this);
    }

    @Override
    public void onConfigurationChanged(@NonNull Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        ApplicationLifecycleDispatcher.onConfigurationChanged(this, newConfig);
    }

    /**
     * Loads Flipper in React Native templates. Call this in the onCreate method with something like
     * initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
     */
    private static void initializeFlipper(
        Context context, ReactInstanceManager reactInstanceManager) {
        if (BuildConfig.DEBUG) {
            try {
                /*
                 We use reflection here to pick up the class that initializes Flipper,
                 since Flipper library is not available in release mode
                */
                Class<?> aClass = Class.forName("info.com.pwa.ReactNativeFlipper");
                aClass.getMethod("initializeFlipper", Context.class, ReactInstanceManager.class)
                      .invoke(null, context, reactInstanceManager);
            }
            catch (ClassNotFoundException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
                e.printStackTrace();
            }
        }
    }
}
github-actions[bot] commented 1 year ago
:warning: Issue is Related to Expo
:information_source: It looks like your issue is related to Expo and not React Native core. Please open your issue in Expo's repository. If you are able to create a repro that showcases that this issue is also happening in React Native vanilla, we will be happy to re-open.