适用于 Android 和 iOS 的不同软件包版本
Posted
技术标签:
【中文标题】适用于 Android 和 iOS 的不同软件包版本【英文标题】:Different package versions for Android and iOS 【发布时间】:2017-07-23 23:38:40 【问题描述】:我正在使用 React Native 为 android 和 ios 开发一个应用程序。
我使用的其中一个库有点问题,因为应用程序只能正确编译:
...在 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)
适用于 Android/iOS/WinPhone 的 Xamarin 通用层