美文网首页
已有Android原生项目集成已有React Native项目

已有Android原生项目集成已有React Native项目

作者: 阿鹏Magic | 来源:发表于2019-04-12 10:53 被阅读0次

已有Android原生项目集成已有React Native项目

  • 现状

    目前有两个项目,一个为Android原生开发,另一个为React Native开发,功能不同,但是使用人群相同,故考虑将两个项目合为一个。

  • 实现过程

    1. 确定集成方式

      一种是原生项目提供一个入口,通过该入口进入React Native(后简述为RN)页面,完整的使用RN的功能。

      一种是原生项目只接入RN部分页面,如商品详情页,投诉建议页面等。

      由于已有项目架构上不能支持第二种,于是本节采用第一种来集成,第二种将在第二节中讲述。

    2. 梳理原生和RN现有工程依赖

      这一步主要是梳理清楚原生和RN工程用到了哪些依赖,要一个不剩的合并在一起,合并后我们工程为图中样子。

      ss_1_

      红色框内为原生项目,蓝色框为RN项目的依赖。

    3. 原生项目添加RN支持

      参考官方文档

      可能遇到的坑

      • java.lang.UnsatisfiedLinkError: could find DSO to load: libreactnativejni.so

        参考

      • 没有正确引入本地RN库

        可以参考我的

        allprojects {
            repositories {
                google()
                jcenter()
                mavenCentral()
                maven { url "https://jitpack.io" }
                // All of React Native (JS, Android binaries) is installed from npm
                maven{
                    url "$rootDir/../node_modules/react-native/android"
                }
                maven {
                    url 'https://maven.google.com/'
                    name 'Google'
                }
            }
        }
        
      • RN不支持armeabi的CPU架构,而导航SDK又只有armeabi

        可以参考这篇文章链接中的6,7解决

      • Debug正常,Release中RN界面直接闪退

        检查是否有正确的打包JS Bundle到assets中,这个官网文档有写

        ss_2

        可以参考我的

        react-native bundle --platform android --dev false --entry-file app.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res/
        

        这里我的入口文件为app.js注意替换为你的

        后面的两个路径,一个是项目入口module的assets文件夹,没有的话记得自己创建一下,另一个是res的路径,RN打包会将图片Copy到drawable中。

    4. 测试启动

      步骤1中配置了RN页面的容器Activity,类似下图

      ss_3

      这里startReactApplication第三个参数为参数,RN页面可以通过props获取。

相关文章

网友评论

      本文标题:已有Android原生项目集成已有React Native项目

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