0

I have a React Native app developed, after upgrading from 0.54 to 0.59.1 the app does not run on device anymore due this error:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ferrometal12/host.exp.exponent.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2778) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856) at android.app.ActivityThread.-wrap11(Unknown Source:0) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6501) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.equals(java.lang.Object)' on a null object reference at host.exp.exponent.ExponentManifest.fetchCachedManifest(ExponentManifest.java:292) at host.exp.exponent.AppLoader.start(AppLoader.java:78) at host.exp.exponent.experience.DetachActivity.onCreate(DetachActivity.java:88) at android.app.Activity.performCreate(Activity.java:7026) at android.app.Activity.performCreate(Activity.java:7017) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1215) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2731) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2856)  at android.app.ActivityThread.-wrap11(Unknown Source:0)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1589)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:164)  at android.app.ActivityThread.main(ActivityThread.java:6501)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) 

I dont know what happened after upgrade but I am no longer able to run successfully the app, gradle builds successfully and the app is installed but when it comes to open it crashes!

Any idea what am I missing?

My manifest file looks like below:

    <?xml version="1.0" encoding="utf-8"?>
<manifest
  package="host.exp.exponent"
  xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools">

  <permission
    android:name="com.ferrometal12.permission.C2D_MESSAGE"
    android:protectionLevel="signature"/>

  <uses-permission android:name="com.ferrometal12.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" />

  <!-- ADD PERMISSIONS HERE -->
  <!-- BEGIN OPTIONAL PERMISSIONS -->
<!--  <uses-permission android:name="android.permission.MANAGE_DOCUMENTS" />-->
  <uses-permission android:name="android.permission.READ_INTERNAL_STORAGE" />
  <uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--  <uses-permission android:name="android.permission.USE_FINGERPRINT" />-->
  <uses-permission android:name="android.permission.VIBRATE" />
  <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT" />

  <!-- These require runtime permissions on M -->
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--  <uses-permission android:name="android.permission.CAMERA" />-->
<!--  <uses-permission android:name="android.permission.READ_CONTACTS" />-->
<!--  <uses-permission android:name="android.permission.READ_CALENDAR" />-->
<!--  <uses-permission android:name="android.permission.WRITE_CALENDAR" />-->
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!--  <uses-permission android:name="android.permission.RECORD_AUDIO" />-->
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--  <uses-permission android:name="android.permission.WRITE_SETTINGS" />-->
  <!-- END OPTIONAL PERMISSIONS -->

  <!-- ADD TEST PERMISSIONS HERE -->

  <uses-feature android:glEsVersion="0x00020000" android:required="false" />

  <application
    android:name=".MainApplication"
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true">

    <activity
      android:name=".LauncherActivity"
      android:exported="true"
      android:launchMode="singleTask"
      android:screenOrientation="portrait"
      android:theme="@android:style/Theme.Translucent.NoTitleBar">
      <!-- ADD SHELL SCHEME HERE -->
    </activity>

    <activity
      android:name=".experience.ExperienceActivity"
      android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
      android:theme="@style/Theme.Exponent.Light"
      android:windowSoftInputMode="adjustResize">
    </activity>

    <activity
      android:name=".MainActivity"
      android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
      android:theme="@style/Theme.Exponent.Splash"
      android:windowSoftInputMode="adjustResize">
      <intent-filter>
        <action android:name="android.intent.action.MAIN"/>

        <category android:name="android.intent.category.LAUNCHER"/>
      </intent-filter>
    </activity>

    <activity
      android:name=".experience.ShellAppActivity"
      android:configChanges="keyboard|keyboardHidden|orientation|screenSize"
      android:theme="@style/Theme.Exponent.Splash"
      android:windowSoftInputMode="adjustResize">
      <!-- ADD SHELL INTENT FILTERS HERE -->
    </activity>

    <activity
      android:name=".experience.HomeActivity"
      android:label="@string/app_name"
      android:launchMode="singleTask"
      android:screenOrientation="portrait"
      android:theme="@style/Theme.Exponent.Light">
    </activity>

    <activity android:name="com.facebook.react.devsupport.DevSettingsActivity"/>
    <!-- ADD DEV SETTINGS HERE -->
    <activity android:name="abi26_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
    <activity android:name="abi25_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
    <activity android:name="abi24_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
    <activity android:name="abi23_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
    <activity android:name="abi22_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
    <activity android:name="abi21_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>
    <activity android:name="abi20_0_0.com.facebook.react.devsupport.DevSettingsActivity"/>

    <activity
      android:name=".ExponentDevActivity"
      android:exported="true"
      android:label="@string/dev_activity_name"
      android:screenOrientation="portrait"
      android:theme="@style/Theme.Exponent.Dark"
      android:windowSoftInputMode="adjustPan">
    </activity>

    <activity
      android:name=".oauth.OAuthWebViewActivity"
      android:screenOrientation="portrait"
      android:theme="@style/Theme.Exponent.Light">
    </activity>

    <activity
        android:name="net.openid.appauth.RedirectUriReceiverActivity"
        tools:node="replace">
      <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="com.ferrometal12" android:path="oauthredirect"
            tools:ignore="AppLinkUrlError" />
      </intent-filter>
    </activity>

    <activity
      android:name=".oauth.OAuthResultActivity">
    </activity>

    <activity
      android:name=".chrometabs.ChromeTabsManagerActivity">
    </activity>

    <activity
      android:name=".experience.ErrorActivity"
      android:theme="@style/Theme.Exponent.Dark"
      android:screenOrientation="portrait">
    </activity>

    <activity
      android:name=".experience.InfoActivity"
      android:screenOrientation="portrait"
      android:theme="@style/Theme.Exponent.Light">
    </activity>

    <activity
      android:name="com.facebook.FacebookActivity"
      android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
      android:label="@string/app_name"
      android:theme="@android:style/Theme.Translucent.NoTitleBar"
      tools:replace="android:theme" />

    <activity
      android:name="com.facebook.ads.InterstitialAdActivity"
      android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
      android:label="@string/app_name"
      android:theme="@android:style/Theme.Translucent.NoTitleBar" />

    <service
      android:name=".ExponentIntentService"
      android:exported="false" />

    <!-- Analytics -->
    <receiver
      android:name="host.exp.exponent.referrer.InstallReferrerReceiver"
      android:exported="true">
      <intent-filter>
        <action android:name="com.android.vending.INSTALL_REFERRER" />
      </intent-filter>
    </receiver>

    <!--
    This crashes: https://code.google.com/p/analytics-issues/issues/detail?id=667
    TODO: turn it back on when it's fixed
    <service
      android:name="com.google.android.gms.analytics.CampaignTrackingService"
      android:enabled="true"
      android:exported="false" />-->

    <receiver android:name="com.google.android.gms.analytics.AnalyticsReceiver"
              android:enabled="true">
      <intent-filter>
        <action android:name="com.google.android.gms.analytics.ANALYTICS_DISPATCH" />
      </intent-filter>
    </receiver>

    <service android:name="com.google.android.gms.analytics.AnalyticsService"
             android:enabled="true"
             android:exported="false"/>


    <!-- ImagePicker native module -->
    <activity
      android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
      android:theme="@style/Base.Theme.AppCompat">
    </activity>


    <!-- ADD FABRIC CONFIG HERE -->
    <!-- BEGIN FABRIC CONFIG -->
    <meta-data
      android:name="io.fabric.ApiKey"
      android:value="a25fafe9f9edee11a9882b32e0cd7a26df6e2c42"/>
    <!-- END FABRIC CONFIG -->

    <!-- ADD GOOGLE MAPS CONFIG HERE -->
    <!-- BEGIN GOOGLE MAPS CONFIG -->
    <meta-data
      android:name="com.google.android.geo.API_KEY"
      android:value="AIzaSyCPyKmt6in3JwAsogYikNNjor8qgU9stRQ"/>
    <!-- END GOOGLE MAPS CONFIG -->

    <!-- ADD BRANCH CONFIG HERE -->

    <!-- The Facebook SDK runs FacebookInitProvider on startup and crashes if there isn't an ID here -->
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="fb0"/>
  </application>

</manifest>

MainActivity.java looks as below:

    package host.exp.exponent;

import android.os.Bundle;

import com.facebook.react.ReactPackage;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import host.exp.exponent.generated.DetachBuildConstants;
import host.exp.exponent.experience.DetachActivity;

public class MainActivity extends DetachActivity {

  @Override
  public String publishedUrl() {
    return "exp://exp.host/@lulzimfazlija/ferrometal12";
  }

  @Override
  public String developmentUrl() {
    return DetachBuildConstants.DEVELOPMENT_URL;
  }

  @Override
  public List<String> sdkVersions() {
    return new ArrayList<>(Arrays.asList("26.0.0"));
  }

  @Override
  public List<ReactPackage> reactPackages() {
    return ((MainApplication) getApplication()).getPackages();
  }

  @Override
  public boolean isDebug() {
    return BuildConfig.DEBUG;
  }

  @Override
  public Bundle initialProps(Bundle expBundle) {
    // Add extra initialProps here
    return expBundle;
  }
}

MainApplication. java looks like:

package host.exp.exponent;


import com.facebook.react.ReactPackage;

import java.util.Arrays;
import java.util.List;

// Needed for `react-native link`
// import com.facebook.react.ReactApplication;

public class MainApplication extends ExpoApplication {

  @Override
  public boolean isDebug() {
    return BuildConfig.DEBUG;
  }

  // Needed for `react-native link`
  public List<ReactPackage> getPackages() {
    return Arrays.<ReactPackage>asList(
        // Add your own packages here!
        // TODO: add native modules!

        // Needed for `react-native link`
        // new MainReactPackage()
    );
  }

  @Override
  public String gcmSenderId() {
    return getString(R.string.gcm_defaultSenderId);
  }

  @Override
  public boolean shouldUseInternetKernel() {
    return BuildVariantConstants.USE_INTERNET_KERNEL;
  }
}
Mizlul
  • 1
  • 7
  • 41
  • 100
  • Have you tried to use the command, react-native upgrade --legacy=true ? try to make a back up first. – André Pinto Sep 01 '19 at 22:07
  • i have done the upgrade, the problem now is app is crashing, I guess due some modification I made I need to republish using exp publish but that gives me another error not being able to read package.json, looks like I need to modify app.json – Mizlul Sep 01 '19 at 22:12

0 Answers0