将 react-native 项目捆绑为 iOS 框架或 (.aar) Android 库

Bundling react-native project as iOS framework or (.aar) Android library

我正在探索使用 react-native 创建一个 iOS 框架(android 库)的可能性,它可以分发并可以通过在构建应用程序时包含与应用程序集成。

例如,维护单一代码库以创建 ios 的“.framework”,或 android 的 .jar(基本上是编译代码而不是 React 组件代码)作为开发人员社区的分发。

React native 推荐的安装 React 依赖项的方式是通过 npm install。一个非常基本的解决方案是在没有 react native 的情况下发布你的库,然后让 SDK 用户通过 react 推荐的方式安装 react native。

https://facebook.github.io/react-native/docs/integration-with-existing-apps.html

这种方法的问题是本地开发人员不熟悉 npm install,并且他们不太愿意解决 npm install 相关问题。本机开发人员更习惯于 gradle 和 cocoapods 来构建他们的应用程序,不幸的是,React Native 已停止支持它。作为 SDK 开发人员,我们不能强迫我们的 SDK 用户开始使用 npm 并遵循 React Native 集成指南。 这就是我们为我们的用例解决这个问题的方式,

Android:

主机在私有 Maven 存储库上做出原生反应,并要求 SDK 用户在他们的项目级 build.gradle 文件中添加以下行,

allprojects {
    repositories {
        jcenter()
        maven {
            // All of React Native (JS, Android binaries) is installed from private maven repo
            url "<Your private maven repo url.>"
        }
    }
}

在应用程序的 build.gradle 文件中添加以下行,

dependencies {

    compile 'com.facebook.react:react-native:0.53.+'

}

您还可以使用此私有 Maven 存储库来托管您的 SDK 的 aar 文件。

通过此更改,Android 开发人员可以非常轻松地在他们的应用中包含您的 SDK 和 React Native。 这种方法的问题是您最终将在自己的私有 Maven 存储库上维护许多 React 版本(维护开销)。

iOS:

我们的第一个解决方案是在 .framework 文件中包含 React 库并创建一个胖二进制文件。这需要您在框架文件中包含 libReact.a 和其他与反应相关的 .a files 以及 link 它们。

使用此解决方案,您的 .framework 包含所有依赖项。与 SDK 的集成将非常容易(只需拖放到 Frameworks 文件夹)。这种方法的问题是 React 本机库的大小正在增长。最新的 libReact.a 文件大小为 105 Mb。这意味着框架文件将非常大,SDK 用户将难以将其推送到 github.

我们最近转向了一个解决方案,我们在私有 pod 中托管 React 本机依赖项,​​SDK 用户可以通过在他们的 Podfile 中添加几行来下载 React 依赖项。这个解决方案就像 React Native 推荐的方式,我们唯一要避免的是 npm install。我们希望为我们的 SDK 用户提供两种选择(一种使用 npm install,另一种不使用)。根据 SDK 用户的反馈,我们将决定未来的构建过程。

请注意,此解决方案存在多种限制和维护开销,但它正在解决我们的用例。它可能不适合所有人。