【问题标题】:React native auto linking is not working (RN0.61.5)React 本机自动链接不起作用(RN0.61.5)
【发布时间】:2021-07-27 08:30:41
【问题描述】:

最近我使用 react-native upgrade 命令从 react-native 0.59.1 升级到 0.61.5。以前我对一些包使用手动链接,我已经使用react-native unlink 将其删除,但现在当我在它构建的 android 上运行时它无法正常工作,但应用程序只显示以下错误

我对 react-native 很陌生,所以我不知道要分享什么。因此,如果您需要更多信息,请询问。

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

【问题讨论】:

  • 这不是链接的问题,你有没有去掉node_modules升级后重新安装?如果没有,请尝试一下
  • 从 android 文件夹中分享您的 MainApplication.java 代码。或者检查自己是否在包列表中添加了模块 DeviceInfo?
  • @Konstantin 我试过了。但是没有用。
  • @AnusKaleem 我已经添加了我的 MainApplication.java 内容请检查...
  • 您使用的是什么版本的 react-native-device-info?您可能需要升级所有其他软件包,因为升级 react-native 版本会破坏很多东西

标签: react-native react-native-android


【解决方案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 平台的手动链接过程。 希望这会有所帮助。

【讨论】:

  • 谢谢。这解决了我的问题。但是 react-native-device-info 文档说如果您使用 rn.60 或更高版本,自动链接将起作用。我不明白为什么它不起作用...
【解决方案2】:

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

运行 npm install 后,尝试转到 Android 文件夹并运行 ./gradlew clean 用于 powershell 或gradlew clean 用于 cmd。

【讨论】:

  • 如果你遇到同样的IOS问题,我建议你通过XCODE清理你的项目并在IOS文件夹中运行pod install
【解决方案3】:

我认为这个包 (react-native-device-info) 与 v0.6 不兼容,例如我无法在没有手动链接的情况下迁移 react-native-bluetooth-status。 但是我检查了react-native-device-info,它已经在 16 天前更新了,所以我猜如果你升级你的包它会自动链接。

【讨论】:

    【解决方案4】:

    我最近偶然发现了同样的问题 -> 当您查看一个新初始化的项目时,您会发现 getPackages() 是依赖于 PackageList(this).getPackages(); 而实现的,而不是在您的依赖项列表中包含 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";
        }
      };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      相关资源
      最近更新 更多