【问题标题】:Bundling react-native project as iOS framework or (.aar) Android library将 react-native 项目捆绑为 iOS 框架或 (.aar) Android 库
【发布时间】:2016-05-18 22:18:06
【问题描述】:

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

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

【问题讨论】:

  • youtube.com/watch?v=HmfEuhb8Lls 可以帮助你在 iOS 中构建你的框架。
  • @ReshmiMajumder,我正在探索使用 react-native 创建框架,以维护 android 和 ios 的单一代码库,
  • 在这种情况下,我认为 .framework 不会在这种情况下工作,您需要一个像 phonegap 这样的跨平台来构建一个混合应用程序而不是原生应用程序
  • @vagdwd 这个成功了吗?我自己也想看同样的……
  • @vagdwd 你有没有找到任何解决方案..?你能指导我吗,因为我正在执行相同的操作。

标签: android ios react-native android-library ios-frameworks


【解决方案1】:

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 集成指南。 这就是我们为我们的用例解决这个问题的方法,

安卓:

在私有 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 和原生响应。 这种方法的问题在于,您最终将在自己的私有 maven 存储库中维护许多 React 版本(维护开销)。

iOS:

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

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

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

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

【讨论】:

  • 我很想看到更多关于您提到的 pod 解决方案的信息。当您说“我们正在托管 React Native 依赖项”时,是指库项目的 repo 还是 RN 依赖项的 repo?
  • @ggsrivas 我如何将这个反应原生模块导出为 AAR 库?
  • @Reem 我没有写 react-native 模块。我创建了一个 android 库,它在内部实例化了一个 react native 应用程序。您可以查看以下存储库,例如 github.com/ggsrivas/reactAndroidSDKDevApp/tree/master/mysdk 当您在库之上构建时,它将生成 .aar 文件。
  • @Reem 是的。您可以在下面的文章中找到更多详细信息,medium.com/@gauravasrivastava89/…
  • @Reem 我会尽快分享 iOS 版本。我需要一些时间先创建示例应用程序和示例 SDK。准备好后我会联系你。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多