Search code examples
react-native

React native auto linking is not working (RN0.61.5)


Recently I have upgraded from react-native 0.59.1 to 0.61.5 using the react-native upgrade command. Previously I was using manual linking for some packages and I had removed it using react-native unlink but now it is not working properly when I run on android it builds, but the app only shows the following error

enter image description here

I'm really new to react-native so I don't know what all to share. So if you need more info just ask.

MainApplication.java

import android.app.Application;

import com.facebook.react.ReactApplication;
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
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
          new MainReactPackage(),
          new 
      );
    }

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

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

  @Override
  public void onCreate() {
    super.onCreate();
    SoLoader.init(this, /* native exopackage */ false);
  }
}

Solution

  • There are some problems with auto linking in certain versions of ReactNative. All your packages are linked inside your MainApplication.java file. In your file, it is clearly seen that RNDeviceInfo is missing from the list of the packages and I suspect here that it might cause problems for rest of the third-party modules also. I am just mentioning here how to deal with the RNDeviceInfo module. Update your source code as:

    
    import android.app.Application;
    
    import com.facebook.react.ReactApplication;
    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;
    
    import com.learnium.RNDeviceInfo.RNDeviceInfo; //Add this import
    
    public class MainApplication extends Application implements ReactApplication {
    
      private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
        @Override
        public boolean getUseDeveloperSupport() {
          return BuildConfig.DEBUG;
        }
    
        @Override
        protected List<ReactPackage> getPackages() {
          return Arrays.<ReactPackage>asList(
              new MainReactPackage(),
              new RNDeviceInfo() //add this dependency in the list
          );
        }
    
        @Override
        protected String getJSMainModuleName() {
          return "index";
        }
      };
    
      @Override
      public ReactNativeHost getReactNativeHost() {
        return mReactNativeHost;
      }
    
      @Override
      public void onCreate() {
        super.onCreate();
        SoLoader.init(this, /* native exopackage */ false);
      }
    }
    

    Once you resolve this, same issue might raise for other modules. To resolve, just visit their github repositories and go through the manual linking process for android platform. Hope this helps.