React 本机自动链接不起作用 (RN0.61.5)
React native auto linking is not working (RN0.61.5)
最近我使用 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);
}
}
为确保您拥有版本 0.61.5 的更新,请查看此 React-Native 更新帮助 link https://react-native-community.github.io/upgrade-helper/.
之后 运行 npm 安装,尝试转到 Android 文件夹和 运行 ./gradlew clean
用于 powershell 或 gradlew clean
用于 cmd。
我认为这个包 (react-native-device-info) 与 v0.6 不兼容,例如我无法在没有手动链接的情况下迁移 react-native-bluetooth-status。
但是我检查了 react-native-device-info 并且它已经在 16 天前更新了,所以我想如果你升级你的包它会自动链接。
某些版本的 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 平台的手动链接过程。
希望这有帮助。
我最近偶然发现了同样的问题 -> 当你查看一个新初始化的项目时,你会看到 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";
}
};
最近我使用 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);
}
}
为确保您拥有版本 0.61.5 的更新,请查看此 React-Native 更新帮助 link https://react-native-community.github.io/upgrade-helper/.
之后 运行 npm 安装,尝试转到 Android 文件夹和 运行 ./gradlew clean
用于 powershell 或 gradlew clean
用于 cmd。
我认为这个包 (react-native-device-info) 与 v0.6 不兼容,例如我无法在没有手动链接的情况下迁移 react-native-bluetooth-status。 但是我检查了 react-native-device-info 并且它已经在 16 天前更新了,所以我想如果你升级你的包它会自动链接。
某些版本的 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 平台的手动链接过程。 希望这有帮助。
我最近偶然发现了同样的问题 -> 当你查看一个新初始化的项目时,你会看到 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";
}
};