title: react-native-video Undefined is not an object (evaluating '_reactNative ...)
body: <p>Hi I am trying to use the module react-native-video (or any video player) to get my video to play on my app, but am running into the error:</p>
  
  <p>Undefined is not an object (evaluating '_reactNative.NativeModules.UIManager.RCTVideo.Constants')
  ![1]: <a href="https://image.ibb.co/nFt2cQ/Screen_Shot_2017_08_23_at_3_47_18_AM.png" rel="nofollow noreferrer">https://image.ibb.co/nFt2cQ/Screen_Shot_2017_08_23_at_3_47_18_AM.png</a> "full error image"</p>
  
  <p>In my index.android.js:</p>
  
  <pre><code>import React, { Component } from 'react';
  import {
    AppRegistry,
    StyleSheet,
    Text,
    View
  } from 'react-native';
  import Video from 'react-native-video';
  
  
  export default class demodigpocv3 extends Component {
    constructor(props){
      super(props);
    }
    render() {
      return (
        &lt;View style={styles.container}&gt;
          &lt;Text&gt;Hello World&lt;/Text&gt;
  
            &lt;Video
              source={require('./videotrack.mp4')}
              repeat={false} /&gt;
  
        &lt;/View&gt;
      );
    }
  }
  
  AppRegistry.registerComponent('demodigpocv3', () =&gt; demodigpocv3);
  </code></pre>
  
  <p>I have ran:</p>
  
  <pre><code>react-native link react-native-video
  </code></pre>
  
  <p>if I rerun it:</p>
  
  <pre><code>rnpm-install info Android module react-native-video is already linked 
  rnpm-install info iOS module react-native-video is already linked 
  </code></pre>
  
  <p>As the docs (<a href="https://github.com/react-native-community/react-native-video" rel="nofollow noreferrer">https://github.com/react-native-community/react-native-video</a>) suggested, in my android/settings.gradle: </p>
  
  <p>></p>
  
  <blockquote>
    <p>*** EDIT, I have replaced the following:
       <code>rootProject.name = 'demodigpocv3'
       include ':react-native-video'
       project(':react-native-video-exoplayer').projectDir = new &gt;File(rootProject.projectDir, '../node_modules/react-native-video/android-&gt;exoplayer')
       include ':app'</code>
    **** WITH this:</p>
    
    <p><code>project(':react-native-video').projectDir = new &gt;File(rootProject.projectDir, '../node_modules/react-native-video/android')</code></p>
  </blockquote>
  
  <p>For the file android/app/build.gradle :</p>
  
  <pre><code>apply plugin: "com.android.application"
  
  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",
   *
   *   // 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: []
   * ]
   */
  
  apply from: "../../node_modules/react-native/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
  
  android {
      compileSdkVersion 23
      buildToolsVersion "23.0.1"
  
      defaultConfig {
          applicationId "com.demodigpocv3"
          minSdkVersion 16
          targetSdkVersion 22
          versionCode 1
          versionName "1.0"
          ndk {
              abiFilters "armeabi-v7a", "x86"
          }
      }
      signingConfigs {
      release {
      storeFile file(MYAPP_RELEASE_STORE_FILE)
      storePassword MYAPP_RELEASE_STORE_PASSWORD
      keyAlias MYAPP_RELEASE_KEY_ALIAS
      keyPassword MYAPP_RELEASE_KEY_PASSWORD
      }
      }
      splits {
          abi {
              reset()
              enable enableSeparateBuildPerCPUArchitecture
              universalApk false  // If true, also generate a universal APK
              include "armeabi-v7a", "x86"
          }
      }
      buildTypes {
          release {
              minifyEnabled enableProguardInReleaseBuilds
              proguardFiles getDefaultProguardFile("proguard-android.txt"), "proguard-rules.pro"
              signingConfig signingConfigs.release
          }
      }
      // applicationVariants are e.g. debug, release
      applicationVariants.all { variant -&gt;
          variant.outputs.each { output -&gt;
              // For each separate APK per architecture, set a unique version code as described here:
              // http://tools.android.com/tech-docs/new-build-system/user-guide/apk-splits
              def versionCodes = ["armeabi-v7a":1, "x86":2]
              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 {
      compile project(':react-native-video')
      compile fileTree(dir: "libs", include: ["*.jar"])
      compile "com.android.support:appcompat-v7:23.0.1"
      compile "com.facebook.react:react-native:+"  // From node_modules
      compile project(':react-native-video')
  }
  
  // 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'
  }
  </code></pre>
  
  <p>In my MainApplication.java :</p>
  
  <pre><code>package com.demodigpocv3;
  import com.brentvatne.react.ReactVideoPackage;
  
  import android.app.Application;
  
  import com.facebook.react.ReactApplication;
  import com.brentvatne.react.ReactVideoPackage;
  import com.facebook.react.ReactNativeHost;
  import com.facebook.react.ReactPackage;
  import com.facebook.react.shell.MainReactPackage;
  import com.facebook.soloader.SoLoader;
  
  import java.util.Arrays;
  import java.util.List;
  
  
  
  
  public class MainApplication extends Application implements ReactApplication {
  
    private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
      @Override
      public boolean getUseDeveloperSupport() {
        return BuildConfig.DEBUG;
      }
    };
  
    @Override
    public ReactNativeHost getReactNativeHost() {
      return mReactNativeHost;
    }
  
    @Override
    public void onCreate() {
      super.onCreate();
      SoLoader.init(this, /* native exopackage */ false);
    }
    @Override
    protected List&lt;ReactPackage&gt; getPackages() {
        return Arrays.asList(
                new MainReactPackage(),
                new ReactVideoPackage()
        );
    }
  }
  
  
  
  I have been looking for a solution for a couple days, and would appreciate any help I could get. I have ran all the steps in the docs and am still getting the error. 
  
  
  Here is a similar stack overflow I have found (https://stackoverflow.com/questions/43130134/react-native-video-android-undefined-is-not-an-object-evaluating-nativemoduel), where the accepted answer is:
  "Fixed adding the ReactVideoPackage when creating the ReactInstanceManager
  
  mReactInstanceManager = ReactInstanceManager.builder()
              .setApplication(getApplication())
              .setBundleAssetName("index.android.bundle")
              .setJSMainModuleName("index.android")
              .addPackage(new MainReactPackage())
              .addPackage(new ReactVideoPackage())//&lt;-- this line fixed
              .setUseDeveloperSupport(BuildConfig.DEBUG)
              .setInitialLifecycleState(LifecycleState.RESUMED)
              .build();
  "
  </code></pre>
  
  <p>Where do I add this?  I tried adding it into my MainActivity.java file (like this below) but the same error is still there:</p>
  
  <pre><code>    package com.demodigpocv3;
  
  import com.facebook.react.ReactActivity;
  
  public class MainActivity extends ReactActivity {
  
      /**
       * Returns the name of the main component registered from JavaScript.
       * This is used to schedule rendering of the component.
       */
      mReactInstanceManager = ReactInstanceManager.builder()
              .setApplication(getApplication())
              .setBundleAssetName("index.android.bundle")
              .setJSMainModuleName("index.android")
              .addPackage(new MainReactPackage())
              .addPackage(new ReactVideoPackage())//&lt;-- this line fixed
              .setUseDeveloperSupport(BuildConfig.DEBUG)
              .setInitialLifecycleState(LifecycleState.RESUMED)
              .build();
  
      @Override
      protected String getMainComponentName() {
          return "demodigpocv3";
      }
  }
  </code></pre>
  
  <p>I would love any solutions, ideally non java solutions (as I don't really know java) and beginner friendly answers/terminology would be preferred.</p>