前言
ReactNative开发过程中,经常会引用一些组件库来实现一些特殊需求。有些组件库使用时,需要link
依赖项,是因为这些库基于一些原生代码实现,你必须把这些文件添加到你的应用,否则应用会在你使用这些库的时候产生报错。 链接原生库有两种方式,一种是自动链接,一种是手动链接。文中以我们开发中常用的react-navigation
组件库为例。
注:使用
link
依赖项之前,需先确认react-native
版本和项目结构
- 若项目为ReactNative项目,且
react-native
版本为0.60版本及以上版本,则不必link
,因为项目中已经写好了link
。- 若项目为ReactNative项目,但
react-native
版本为0.60以下,则需要自动或者手动link
- 若项目是Android项目结构则需要手动
link
,切勿用自动link
,因为自动link的地址指向默认是ReactNative项目结构。
1.自动链接
- 首先,安装一个带原生依赖的库(以
react-navigation
为例。下同)$ npm install react-navigation $ npm install react-native-gesture-handler
- 然后,自动
link
依赖项// 链接所有需要链接的库 $ react-native link // 如果只需要链接某一个库 $ react-native link react-native-gesture-handler
2.手动链接
当自动链接没有生效的时候,可以使用手动链接来实现链接依赖项。
- 首先,在Android项目的根目录中的
settings.gradle
中添加include ':react-native-gesture-handler' project(':react-native-gesture-handler').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-gesture-handler/android')
- 然后,在
build.gradle
添加依赖implementation project(':react-native-gesture-handler') implementation "com.facebook.react:react-native:+"
- 最后,在
Application
中引入Package()
方法import com.swmansion.gesturehandler.react.RNGestureHandlerPackage; @Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( new MainReactPackage(), // ReactNative默认方法 new RNGestureHandlerPackage() // react-native-gesture-handler的方法 ); }
注:若
getPackages()
方法如下,则不需要更改。@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; }