你可能不喜欢我的回答,但请记住,过去几年我一直在从事一些复杂的 react-native 项目。所以我说的是经验。
1.- 这是一个糟糕的主意。2.- 也是可能的。
为什么是一个可怕的想法?A)因为您将在应用程序中捆绑完整大小的 react-native,无论使用情况如何。B)因为 react-native 是一个渲染引擎(而且成本很高)。不是为无头使用而设计的。它有一个重要的启动时间,因此您的 SDK 在启动应用程序后将不可用。默认情况下,一旦有东西覆盖了 UI(如权限对话框),ReactActivity 就会停止 JS 引擎,如果您的 SDK 打算同时被调用,则会导致有趣和有趣的问题。根据设计,桥接模型涉及大量延迟。react-native 依赖项可能与应用程序中的依赖项不匹配,从而导致另一个问题。攻击者更容易阅读,因为任何 IDE 都可以重新格式化一个大脚本。根据您的 SDK 需要做什么,您可能需要编写一堆更复杂的本机代码。如果您有 JS 依赖项,构建步骤将要求使用者使用 yarn/npm 来构建应用程序,并且将迫使使用者集成 react-native 的 hacky gradle 步骤(以及他们的 CI 工具)。如果 react-native 库给您带来问题,您将不得不对其进行修补。所以,麻烦的机会很多。
也就是说,您可以使用捆绑命令(react-native 捆绑包)从您想要的任何文件创建 JS 捆绑包。所以你可以打包一个非 UI 的 JS 函数并直接在 ReactActivity 中加载它们。如果消费者应用程序有意忽略该过程,您将必须创建一个基本活动和基本应用程序,加载 Catalyst,将您的包传递给 reactInstance,加载它,并创建一个 JVM (kotlin/java) API暴露一个单例或类似的东西,它使用发射器发送命令。而这只是安卓。iO 将有类似的路径,但通过 xCode 集成 SDK 会增加复杂性。
我会推荐你,经历过这个,来省去麻烦,然后尝试使用 kotlin 多平台。专为这种场景而设计,android 开箱即用,将对象 C 框架与 xCode 集成要容易得多,并且不会强迫消费者做任何奇怪的事情。并且会更好地工作,免费。