React Native嵌入到原生Android问题记录

本文主要是记录ReactNative嵌入到原生Android中遇到的一些问题以及解决方法。关于配置方面在这里就不说了。可以参考FaceBook的官方文档,或者ReactNarive中文版

1、java.lang.IllegalAccessError: Method ‘void android.support.v4.net.ConnectivityManagerCompat.<init>()’ is inaccessible to class ‘com.facebook.react.modules.netinfo.NetInfoModule’ (declaration of ‘com.facebook.react.modules.netinfo.NetInfoModule’ appears in /data/app/package.name-2/base.apk

解决办法:把support相关包改成23.0.1

compile 'com.android.support:appcompat-v7:23.0.1'

2、ReferenceError: Can’t find variable: __fbBatchedBridge

解决办法:晃动手机或者点击Menu菜单就会打开相关的调试页面,前提是要在配置文件中配置RN的DevSettingsActivity,让RN项目支持调试。

<activity android:name=”com.facebook.react.devsupport.DevSettingsActivity” />

选择Dev Settings,然后选择Debug server host & port for device,输入你的ip和8081端口,例如:192.168.1.100:8081,然后重试。

3、启动RN服务器的时候报错:

Loading dependency graph… ERROR  Packager can’t listen on port 8081

解决办法:端口被占用,在命令行输入lsof -i :8081 查看占用该端口的进程,然后执行命令“kill -9 进程id” ,再重启服务器。

4、Unable to download JS bundle:

原因是在npm install的时候曾经出现过

react-native@0.43.4 requires a peer of react@16.0.0-alpha.6 but none was installed.

解决办法:

执行 npm i -S react@16.0.0-alpha.6

重启npm start。

5、出现Got JS Exception: TypeError: undefined is not a function (evaluating ‘(bridgeConfig.remoteModuleConfig || []).forEach’) 的错误,原因是被官方文档坑了,官方文档是这样描述的:

allprojects {
    repositories {
        ...
        maven {
            // All of React Native (JS, Android binaries) is installed from npm
            url "$rootDir/../node_modules/react-native/android"
        }
    }
    ...
}

然而正确应该是:

allprojects {
    repositories {
        jcenter()

        maven {
            // All of React Native (JS, Android binaries) is installed from npm
            url "$rootDir/node_modules/react-native/android"
        }
    }
}