React Native源码编译

2022-12-30  本文已影响0人  放羊娃华振

一、创建一个新的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文件


image.png

当成功执行上面的命令执行成功后,可以看到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目录下看到编译好的依赖包:


image.png

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


image.png

五、缩包思路:

1.修改RN源码,注释掉Soloader.loadLibrary相关的代码,如下图所示:


image.png

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

上一篇 下一篇

猜你喜欢

热点阅读