从远程主机响应本机 hermes 依赖项

React native hermes dependencies from a remote host

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

def hermesPath = "$rootDir/../../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")

我需要找到一种方法将这些文件托管在我已经用于 react-native android 依赖项之类的 s3 存储桶中。

我的用例是独一无二的。我创建了一个 Android activity 来安装一个 react-native 应用程序。我使用 ./gradlew assembleRelease uploadArchives 创建它的新版本,然后使用 ci/cd 从 uploadArchives 转储文件夹的目录将其上传到 s3。 react-native node_module 还具有已打包的依赖项,因此它们也并排放置在 s3 存储桶中。我的插件的根 build.gradle 文件引用存储桶本身来获取 react-native 依赖项,就像这样

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-native 应用程序。为了使用 hermes,需要添加以下行

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 文件(我想?我对这东西很陌生)。所以我在这里发帖并@that other guy passed a very useful command。

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的debug和release版本做这个(node_modules目录下有两个。

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

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
    }
...
}