React Native源码编译
一、创建一个新的Android support工程。
因为我使用的是0.59.10版本,这个版本的源代码是只支持suport依赖的,所有必须使用suport工程!!!!
二、集成React Native
在创建好的项目下面执行下面命令
npm install --save react@16.3.1 react-native@0.55.4
此时会生成文件:package.json、package-lock.json文件

当成功执行上面的命令执行成功后,可以看到rn源码,源码路径为:
.../RnSource/node_modules/react-native/ReactAndroid
如果没有生成package.json文件,就自己创建,内容如下:
{
"name": "MyReactNativeApp",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.jsstart"
},
"dependencies": {
"react": "16.3.1",
"react-native": "0.55.4"
}
}
三、依赖源码方式
1.添加gradle-download-task依赖
classpath 'de.undercouch:gradle-download-task:3.3.0'
2.配置ANDROID_NDK环境变量:
export ANDROID_NDK=/Users/xxx/xxxx/android-ndk-r20b
export PATH=$PATH:$ANDROID_NDK
3.Android Studio配置NDK路径:
可以在Android studio的设置里面配置,也可以直接修改local.properties中添加
ndk.dir=/xxxx/xxxx/xxxx/xxxx/android-ndk-r15c
4.配置setting.gradle文件,需要在文件中添加ReactAndroid的定义和具体工程地址
include ':ReactAndroid'
project(':ReactAndroid').projectDir = new File(rootProject.projectDir, 'node_modules/react-native/ReactAndroid')
可以通过打印的方式校验rn依赖的路径是否正确:
System.out.println("projectDir路径是:"+rootProject.projectDir)
def rnfile= new File(rootProject.projectDir, 'node_modules/react-native/ReactAndroid')
System.out.println("rn路径是:"+rnfile.getAbsoluteFile())
四、编译
当环境变量、ndk、和工程依赖配置完成之后就可以进行编译了,如果遇到android studio的运行按钮编译异常,可以尝试使用命令行编译:
./gradlew clean assembleDebug
当编译成功之后可以在node_modules/react-native/android/com/facebook/react/react-native/0.59.10目录下看到编译好的依赖包:

之后把这些依赖放到自己的仓库或者是放到工程的lib目录下使用即可。这几个依赖中最核心的是react-native-0.59.10.aar,可以看到他里面包含了rn的核心动态链接库文件,如果需要实现React Native的缩包就可以从这里入手。

五、缩包思路:
1.修改RN源码,注释掉Soloader.loadLibrary相关的代码,如下图所示:

2.重新编译,生成aar。
3.编译产物去掉react-native-0.59.10.aar中的so文件,之后把这aar放到maven仓库中(本地或者云端仓库都可以)。
4.把第三步中移除的aar存到服务器,给后续下载使用。
5.完成Android下载功能,实现下载服务器中的so文件。
6.把so文件放到android/data目录下。
7.找到合适的入口load下载完成的so文件。