适用于 Android 和 iOS 的不同软件包版本

Posted

技术标签:

【中文标题】适用于 Android 和 iOS 的不同软件包版本【英文标题】:Different package versions for Android and iOS 【发布时间】:2017-07-23 23:38:40 【问题描述】:

我正在使用 React Native 为 androidios 开发一个应用程序。

我使用的其中一个库有点问题,因为应用程序只能正确编译:

...在 Android 上使用 "react-native": "0.42.0"。 ...在 iOS 上使用 "react-native": "0.37.0"

(库本身和react-native 的特定版本对于本次讨论都不重要。重要的是我似乎需要两个单独的版本“同时” -每个平台都有一个不同的。)

我正在寻找一种方法来获得一个单一的代码库,该代码库可以使用任何平台的相关工具进行编译,无需任何修改1。我想到的解决方案是(以某种方式):

为每个移动操作系统指定不同的软件包版本。 每个平台都有完全不同的package.json 文件。

但是,我不知道如何实现上述任何一项,或者它们是否可能。我尝试按照React-Native docs on platform-specific code 中的说明添加.ios.android,但npm 无法识别这些文件。

所以我的问题是:

    我的想法可行吗?如果可行 - 怎么样? 还有其他方法可以得到想要的结果吗?

1 在类 C 代码中,使用预处理器标志很容易做到这一点。

【问题讨论】:

您使用的库是什么?我真的不会在 ios/android 上使用不同的 RN 版本。它们之间的差异在某些时候会变得非常难以处理。 0.42+ 有一些你的 ios 应用程序会错过的错误修复。在此之上,您将不得不错过新的可用功能。我会去查看库并使其在 0.42 上运行,只要维护者在项目中,打开 PR 就会有所帮助。 @dhorelik - 感谢您的评论。该库本身正在积极开发中,我相信最终会解决这种差异。我的问题具有更笼统的性质,所以我没有特别提到图书馆。在这种特定情况下,RN 版本需要不同,但它也可以很容易地成为其他一些依赖项。我想有一种方法来解决由于某种原因(由于一些小的功能更改等)需要不同的库版本的情况。我认为这个问题如果保持一般性,将来可能会使其他人受益更多。 @Dev-iL 我面临的情况是,我使用的是适用于 android 而不是 iOS 的包,如何在不干扰 iOS 构建的情况下使用单个代码库实现这一点? @vignesh 我几乎不是这个主题的专家,所以想到的唯一想法是创建包的本地副本(“版本”),然后删除大部分 iOS来自它的代码 - 使其符合但没有效果。 遇到类似问题@Dev-iL -- 你找到解决方案了吗? 【参考方案1】:

还没有尝试过,但我会尝试。有人建议我试试这个:“将package.json 中的 npm 别名与 Metro 支持的特定于平台的文件(例如 Component.ios.js)结合起来”

可能是……


  "package-v1": "http://example.com/package-v1",
  "package-v2": "http://example.com/package-v2",
   // or GitHub based
  "package-v1": "orgname/package#v1",
  "package-v2": "orgname/package#v2",


// Component.ios.js
import "package-v1"

// Component.android.js
import "package-v2"

【讨论】:

以上是关于适用于 Android 和 iOS 的不同软件包版本的主要内容,如果未能解决你的问题,请参考以下文章

适用于 iOS/Android/Windows 8 的混合应用程序

广告拦截:AdGuard Premium v7.11 .3正式破解版(Windows/Android/Mac)

关于熊猫认证软件IOS安装步骤教程(适用于其他软件)

适用于 Android/iOS/WinPhone 的 Xamarin 通用层

适用于 Android 的 Android 地图 SDK 在发行版中不工作

适用于 android 的 Google 地图和 Places SDK 在发行版 APK 中不工作