[expo 47] Production eas build crushes only Android devices

In the past week i’ve updated my app and released an update. The update build and runs perfectly both on my device and the emulator when running:

npm run android

After creating the Production build by doing:

eas build --platform android

I’ve submitted the build artefact with the update into Google Play Store, but after downloading the app from the store it’s crushes immediately on startup.
After looking at the logs, seems that this is the error that causes the issue:

The embedded manifest is invalid or could not be read. Make sure you have configured expo-updates correctly in android/app/build.gradle. null

I must say that before releasing this update i was messing around with the versions of the application, looks like i bumped the version from 1.0.1 to 1.0.3

eas.json

{
  "cli": {
    "version": ">= 3.8.1"
  },
  "build": {
    "development": {
      "distribution": "internal",
      "android": {
        "gradleCommand": ":app:assembleDebug"
      },
      "ios": {
        "buildConfiguration": "Debug",
        "resourceClass": "m-medium",
        "simulator": true
      }
    },
    "preview": {
      "distribution": "internal",
      "ios": {
        "resourceClass": "m-medium"
      }
    },
    "production": {
      "autoIncrement": true,

      "ios": {
        "resourceClass": "m-medium"
      }
      
    }
  },
  "submit": {
    "production": {}
  }
}

package.json

{
  "name": "myapp",
  "version": "1.0.0-beta",
  "author": "author",
  "scripts": {
    "start": "npx expo start --dev-client",
    "android": "npx expo run:android",
    "build": "npx expo run:ios",
    "ios": "expo run:ios",
    "web": "expo start --web"
  },
  "dependencies": {
    "@react-native-async-storage/async-storage": "~1.17.3",
    "@react-native-clipboard/clipboard": "^1.11.2",
    "@react-native-community/masked-view": "^0.1.11",
    "@react-native/assets-registry": "^0.72.0",
    "@react-navigation/bottom-tabs": "6.5.4",
    "@react-navigation/native": "^6.1.2",
    "@react-navigation/native-stack": "^6.9.8",
    "@react-navigation/stack": "^6.3.11",
    "@reduxjs/toolkit": "^1.9.1",
    "@supabase/supabase-js": "^2.10.0",
    "axios": "^1.2.4",
    "expo": "~47.0.14",
    "expo-app-loading": "~2.1.1",
    "expo-apple-authentication": "~5.0.1",
    "expo-auth-session": "~3.8.0",
    "expo-constants": "~14.0.2",
    "expo-device": "~5.0.0",
    "expo-font": "~11.0.1",
    "expo-intent-launcher": "~10.3.1",
    "expo-location": "~15.0.1",
    "expo-random": "~13.0.0",
    "expo-splash-screen": "~0.17.5",
    "expo-status-bar": "~1.4.2",
    "expo-system-ui": "~2.0.1",
    "expo-updates": "~0.15.6",
    "jwt-decode": "^3.1.2",
    "react": "18.1.0",
    "react-dom": "18.1.0",
    "react-hook-form": "^7.42.1",
    "react-native": "0.70.8",
    "react-native-gesture-handler": "~2.8.0",
    "react-native-ionicons": "^4.6.5",
    "react-native-maps": "1.3.2",
    "react-native-reanimated": "~2.12.0",
    "react-native-safe-area-context": "4.4.1",
    "react-native-screens": "~3.18.0",
    "react-native-snap-carousel": "^4.0.0-beta.6",
    "react-native-url-polyfill": "^1.3.0",
    "react-native-vector-icons": "^9.2.0",
    "react-native-web": "~0.18.7",
    "react-navigation": "^4.4.4",
    "react-navigation-stack": "^2.10.4",
    "react-redux": "^8.0.5",
    "redux": "^4.2.0"
  },
  "devDependencies": {
    "@babel/core": "^7.19.3",
    "@types/react": "~18.0.24",
    "@types/react-native": "~0.70.6",
    "react-native-dotenv": "^3.4.8",
    "typescript": "^4.6.3"
  },
  "private": true
}

app.json

{
  "expo": {
    "name": "name",
    "slug": "slug",
    "scheme": "app",
    "version": "1.0.3",
    "orientation": "portrait",
    "icon": "./assets/icon.png",
    "userInterfaceStyle": "light",
    "plugins": [
      "expo-apple-authentication",
      [
        "expo-location",
        {
          "locationAlwaysAndWhenInUsePermission": "Allow $(PRODUCT_NAME) to use your location."
        }
      ]
    ],
    "androidStatusBar": {
      "backgroundColor": "#FFFFFF",
      "barStyle": "dark-content"
    },
    "splash": {
      "image": "./assets/splash.png",
      "resizeMode": "contain",
      "backgroundColor": "#FFFFFF"
    },
    "updates": {
      "fallbackToCacheTimeout": 0
    },
    "assetBundlePatterns": [
      "**/*"
    ],
    "ios": {
      "supportsTablet": false,
      "bundleIdentifier": "bundleIdentifier",
      "buildNumber": "1.0.11"
    },
    "android": {
      "package": "package",
      "adaptiveIcon": {
        "foregroundImage": "./assets/adaptive/foreground.png",
        "backgroundImage": "./assets/adaptive/background.png"
      },
      "splash": {
        "image": "./assets/splash.png",
        "backgroundColor": "#FFFFFF"
      },
      "permissions": [
        "android.permission.ACCESS_COARSE_LOCATION",
        "android.permission.ACCESS_FINE_LOCATION",
        "android.permission.FOREGROUND_SERVICE"
      ],
      "versionCode": 18
    },
    "web": {
      "favicon": "./assets/favicon.png"
    },
    "extra": {
      "eas": {
        "projectId": "projectId"
      }
    }
  }
}

AndroidManifest.xml


<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="package">
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
  <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
  <uses-permission android:name="android.permission.VIBRATE"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <queries>
    <intent>
      <action android:name="android.intent.action.VIEW"/>
      <category android:name="android.intent.category.BROWSABLE"/>
      <data android:scheme="https"/>
    </intent>
  </queries>
  <application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="true" android:theme="@style/AppTheme" android:usesCleartextTraffic="true">
    <meta-data android:name="expo.modules.updates.EXPO_SDK_VERSION" android:value="47.0.0"/>
    <meta-data android:name="expo.modules.updates.EXPO_RELEASE_CHANNEL" android:value="default"/>
    <meta-data android:name="expo.modules.updates.ENABLED" android:value="false"/>
    <meta-data android:name="expo.modules.updates.EXPO_UPDATES_CHECK_ON_LAUNCH" android:value="ALWAYS"/>
    <meta-data android:name="expo.modules.updates.EXPO_UPDATES_LAUNCH_WAIT_MS" android:value="0"/>
    <activity android:name=".MainActivity" android:label="@string/app_name" android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode" android:launchMode="singleTask" android:windowSoftInputMode="adjustResize" android:theme="@style/Theme.App.SplashScreen" android:exported="true" android:screenOrientation="portrait">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>
        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
      <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <data android:scheme="app"/>
        <data android:scheme=""/>
      </intent-filter>
    </activity>
    <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false"/>
  </application>
</manifest>

I’ve tried all the possible suggestions that i could find online in order to fix it but nothing did worked. Any support with this topic will be highly appreciated since the application is down

We’re plagued with this problem as well.

Our application wouldn’t even get to the splash screen :frowning:

Are you using expo-updates?

I don’t know if there was a configuration change in the eas build pipeline that triggered this.

@jose.asilis, until this issue was started, i didn’t event been aware tohat this thing i exists. Myabe i used it, but i never configured it

Is there anyone that could suggest me how to resolve this issue? My app is down for 6 days because of that.

@jose.asilis looks like doing this guide solve the issue

1 Like

@kalbytes

We will further investigate it on Monday. We’ve found out that by using a much earlier version of the eas-cli it would work.

Try downgrading to v 1.1.1 (or somewhere around that) and running it.

I was inspecting the expo repo, and I haven’t found any differences.