我正在尝试创建一个基于react的SDK,(即(我将拥有一个Android/iOS包,它将成为应用程序的入口点,并将使用react代码来使用现有的业务逻辑。我能够将React的AppRegistry.registerComponent
视为React应用程序的入口点。但对于我的用例,我没有任何视图依赖性。我只有商业逻辑。我应该如何创建捆绑包?
在Android和iOS中,我将编写一个脚本,将使用此RN包创建的捆绑包复制粘贴到资产文件夹中,然后使用此index.bundle
创建ReactInstanceManager
请帮助我理解这项训练(基于React的SDK,没有视图组件(。我需要做些什么来制作这个SDK。
注意:此SDK可以集成在现有的应用程序中,该应用程序已经具有用于渲染某些屏幕的react原生依赖性。我的SDK也应该处理这个用例。
您可能不喜欢我的回答,但请记住,在过去几年里,我一直在从事一些复杂的react本地项目。所以我说的是经验。
1.-这是个糟糕的主意。2.-也是可能的。
为什么这个主意很糟糕?A( 因为无论使用情况如何,你都会将react native的全部大小捆绑在一个应用程序中。B( 因为react native是一个渲染引擎(也是一个非常昂贵的引擎(。不是为无头使用而设计的。它有一个非琐碎的启动时间,所以你的SDK在启动应用程序后将不可用。默认情况下,一旦有东西覆盖了UI(比如权限对话框(,ReactActivity就会停止JS引擎,如果要同时调用SDK,就会导致有趣的问题。桥接模型在设计上涉及很多延迟。react本机依赖项可能与应用程序中的依赖项不匹配,从而导致另一系列问题。更容易被攻击者读取,因为这是一个任何IDE都可以重新格式化的大脚本。根据您的SDK需要做什么,您可能需要编写一组更复杂的本地代码。如果你有JS依赖项,构建步骤将要求消费者使用yarn/npm来构建应用程序,并将迫使消费者集成react native的hacky gradle步骤(以及集成到他们的CI工具中(。如果react原生库给您带来问题,您将不得不对其进行修补。因此,出现麻烦的可能性很大。
也就是说,您可以通过使用bundling命令(react native bundle(从您想要的任何文件创建JS bundle。因此,您可以打包非UI JS函数,并将它们直接加载到ReactActivity中。如果消费者应用程序打算忽略这个过程,你将不得不制作一个Base活动&基本应用程序,加载Catalyst,将捆绑包传递给reactInstance,加载它,还创建一个JVM(kotlin/java(API,公开一个singleton或类似的东西,它使用Emitter发送命令。这只是一个机器人。iOs将有类似的路径,但通过xCode集成SDK会增加复杂性。
在经历了这些之后,我建议你省去麻烦,转而尝试使用kotlin多平台。是为这种场景设计的,android开箱即用,将对象C框架与xCode集成要容易得多,而且不会强迫消费者做任何奇怪的事情。而且免费的效果会好得多。