React Native 链接原生库,从开发到使用

作者: 2b1ed5b649ed | 来源:发表于2018-08-12 13:42 被阅读67次

    本文原创,转载需告知并注明来源。建议使用宋体阅读
    》原文链接:https://www.jianshu.com/p/8761fe30065c
    》邮件联系:mr.huangjian@foxmail.com

    与普通模块的开发与使用不同的是,链接原生库的模块需要:

    1. 开发原生代码
    2. iOS 工程存放到 ios 目录下, Android 工程存放到 android 目录下,其中目录名是确定的!
    3. 通过 react-native link 命令链接原生库

    开发

    我们创建一个供 React Native 使用的 npm 模块, 目录结构类似于:

    ...
    ├── android         # Android 工程目录
    ├── ios             # iOS 工程目录
    ├── index.js        # React Native (JS) 相关文件
    └── package.json    # 模块配置文件
    

    可参考别人已经写好的 react-native-default-preference


    使用

    通过使用 npm i xxx 安装模块,然后通过命令 react-native link xxxreact-native link 进行原生库的链接。

    $ react-native link
    Scanning folders for symlinks in /Users/Calorie/Desktop/test/node_modules (21ms)
    rnpm-install info Linking react-native-default-preference ios dependency 
    rnpm-install info Platform 'ios' module react-native-default-preference has been successfully linked 
    rnpm-install info Linking react-native-default-preference android dependency 
    rnpm-install info Platform 'android' module react-native-default-preference has been successfully linked 
    
    $ react-native link react-native-default-preference
    Scanning folders for symlinks in /Users/Calorie/Desktop/test/node_modules (10ms)
    rnpm-install info Platform 'ios' module react-native-default-preference is already linked 
    rnpm-install info Platform 'android' module react-native-default-preference is already linked 
    

    react-native link xxx 命令大致运行原理:

    1. package.json 检测是否包含 xxx 依赖,如果包含该依赖则进行下一步;
    2. 访问 ./node_modules/xxx 目录,然后找到 iosandroid,判断这两个目录是否包含对应系统的工程文件;
    3. 如在 ios 目录,找到 *.xcodeproj,这样就可以将该工程链接到原生库中了。

    通过 react-native link xxx 命令可以链接到原生库,要注意两个地方以确保链接成功:

    1. *.xcodeproj 添加到 Libraries 组;
    2. 其对应生成的 *.a 添加到 Link Binary With Libraries
    image

    如果没链接成功,也可以手动添加

    参考链接:链接原生库


    相关文章

      网友评论

        本文标题:React Native 链接原生库,从开发到使用

        本文链接:https://www.haomeiwen.com/subject/rossbftx.html