记一次比较小众的原生和React Native混合开发问题

49 阅读1分钟

业务背景公司采用原生appRN0.81混合开发,原生app还得在以前的老旧项目内开发,需要兼容老项目和新重构的代码,ios上集成的倒挺顺利,安卓上就各种问题。从mmkv、reanimted库到nitro模块的支持,各种报错和运行崩溃。

经过我的AI充值,与AI的一天半的不懈努力,感谢claude sonnet/opus 4.5终于是弄清楚了问题在哪里,安卓的build.gradle.kts内使用了cmake编译CMakeLists.txt与RN的冲突。

双重 CMake 配置冲突:

app/build.gradle.kts 中配置了 externalNativeBuild { cmake { path =file("CMakeLists.txt")} }

RN 0.82.1 新架构的 com.facebook.react 插件也会自动配置 CMake 构建(用于 Fabric、TurboModules、JSI 等)

Android Gradle Plugin 不支持同一模块中存在多个独立的 CMake 构建配置

安卓踩坑

1、集成Reanimated库以后,报错Crash on first start (Reanimated 4 supports only the React Native New Architecture)

2、集成mmkv库,新版mmkv又依赖nitro模块,造成集成以后安卓就运行崩溃。

解决方案:

去issue里面找、让ai看源码,各种方式来回折腾,谁能想到问题在安卓编译c++的这里!!!

1、移除安卓旧架构功能代码,使用新架构api

2、把安卓使用 CMakeLists.txt 的功能封装为一个独立的模块,保持与RN相互隔离

小吐槽一下:领导让我自己看问题,他也不懂这些,我只是个前端啊!原生觉得集成的没问题,这个苦只能自己吃。现在的前端是真难做啊,害~~~