React本机自动链接不起作用(RN0.61.5)

时间:2019-12-05 12:52:16

标签: react-native react-native-android

最近,我已使用react-native upgrade命令从本机 0.59.1 升级到 0.61.5 。以前,我使用了某些软件包的手动链接,而我使用react-native unlink删除了它,但是当我在android上运行时,它无法正常运行,但是该应用仅显示以下错误

enter image description here

我真的很想反应原生语言,所以我不知道该分享些什么。因此,如果您需要更多信息,请询问。

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);
  }
}

4 个答案:

答案 0 :(得分:1)

要确保您拥有0.61.5版的更新,请查看此React-Native更新帮助链接https://react-native-community.github.io/upgrade-helper/

运行npm install之后,尝试转到Android文件夹并为Powershell运行./gradlew clean或为cmd运行gradlew clean

答案 1 :(得分:1)

在某些版本的ReactNative中,自动链接存在一些问题。您的所有软件包都链接在MainApplication.java文件中。在您的文件中,可以清楚地看到软件包列表中缺少RNDeviceInfo,我在这里怀疑它还会对其余第三方模块造成问题。我只是在这里提到如何处理RNDeviceInfo模块。 将您的源代码更新为:


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);
  }
}

解决此问题后,其他模块可能会出现相同的问题。要解决此问题,只需访问他们的github存储库,并完成android平台的手动链接过程即可。 希望这会有所帮助。

答案 2 :(得分:0)

我认为此软件包(react-native-device-info)与v0.6不兼容,例如,如果没有手动链接,我将无法迁移react-native-bluetooth-status。 但是我检查了react-native-device-info,它已经在16天前进行了更新,所以我想如果您升级软件包,它会自动链接。

答案 3 :(得分:0)

我最近偶然发现了同一问题->当您查看一个新初始化的项目时,您会发现getPackages()的实现依赖于PackageList(this).getPachages();而不是列表中有new MainReactPackage()的依赖关系。

  private final ReactNativeHost mReactNativeHost =
  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 autolinked yet can be added manually here, for example:
      // packages.add(new MyReactNativePackage());
      return packages;
    }

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