首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从远程主机反应本机hermes依赖关系

从远程主机反应本机hermes依赖关系
EN

Stack Overflow用户
提问于 2020-05-06 03:30:51
回答 1查看 387关注 0票数 0

现在,将hermes集成到react原生应用程序中需要以以下方式本地包含来自node_modules的文件

代码语言:javascript
复制
def hermesPath = "$rootDir/../../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")

我需要找出一种方法将这些文件托管在一个s3存储桶中,这个存储桶已经用于像react-native android依赖这样的东西。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-07 02:23:22

我的用例是独特的。我已经创建了一个Android activity,它挂载了一个react原生应用程序。我使用./gradlew assembleRelease uploadArchives创建它的新版本,并使用ci/cd将其上传到s3,该目录位于uploadArchives转储文件夹的目录中。react-native node_module还具有已经打包的依赖项,以便在s3存储桶中并排存在。我的插件的根build.gradle文件引用存储桶本身来获得反应原生依赖关系,如下所示

代码语言:javascript
复制
maven {
    url "http://plugin name.s3.amazonaws.com/releases"
}

然后在依赖关系块内的app.build.gradle中,implementation ('com.facebook.react:react-native:0.62.2') { force = true }

即引用s3上上传的react-native依赖项。随着升级到62.2,react原生应用程序增加了一个额外的依赖项。为了使用hermes,需要添加以下代码行

代码语言:javascript
复制
def hermesPath = "$rootDir/../../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")

这对我们不起作用,因为当集成应用程序尝试添加android activity +捆绑的javascript并实例化它时,它会因缺少hermes依赖项而崩溃。以下是错误:UnsatisfiedLinkError: couldn't find DSO to load。解决这个问题的唯一方法是将上面的依赖项从一个相对目录添加到父项目,这对我们来说不是一个选择。需要做的是在s3上托管hermes releasedebug aar文件。然而,gradle/maven不能使用没有.pom文件的aar文件(我想?我是个新手)。所以我在这里发了一个帖子,@那个家伙传递了一个非常有用的命令。

代码语言:javascript
复制
mvn install:install-file -Dfile=node_modules/hermes-engine/android/hermes-release.aar -DgroupId=com.hermes -DartifactId=hermes-release -Dversion=0.4.1 -Dpackaging=aar -DgeneratePom=true

因此,基本上这个命令会以所需的方式创建一个版本化的和可使用的。您可以对hermes的调试和发布版本执行此操作(在node_modules目录中有两个)。

然后你可以将它们上传到s3,插件可以引用这些依赖项,而父应用程序也不需要引用它们。(版本是任意的)

代码语言:javascript
复制
def jscFlavor = 'org.webkit:android-jsc:+'
dependencies {
    def enableHermes = project.ext.react.get("enableHermes", false);
    println enableHermes
      // for RN 0.61+
    if (enableHermes) {
        debugImplementation 'com.hermes:hermes-debug:0.4.1'
        releaseImplementation 'com.hermes:hermes-release:0.4.1'
    } else {
        implementation jscFlavor
    }
...
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61621460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档