现在,将hermes集成到react原生应用程序中需要以以下方式本地包含来自node_modules的文件
def hermesPath = "$rootDir/../../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")我需要找出一种方法将这些文件托管在一个s3存储桶中,这个存储桶已经用于像react-native android依赖这样的东西。
发布于 2020-05-07 02:23:22
我的用例是独特的。我已经创建了一个Android activity,它挂载了一个react原生应用程序。我使用./gradlew assembleRelease uploadArchives创建它的新版本,并使用ci/cd将其上传到s3,该目录位于uploadArchives转储文件夹的目录中。react-native node_module还具有已经打包的依赖项,以便在s3存储桶中并排存在。我的插件的根build.gradle文件引用存储桶本身来获得反应原生依赖关系,如下所示
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,需要添加以下代码行
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 release和debug aar文件。然而,gradle/maven不能使用没有.pom文件的aar文件(我想?我是个新手)。所以我在这里发了一个帖子,@那个家伙传递了一个非常有用的命令。
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,插件可以引用这些依赖项,而父应用程序也不需要引用它们。(版本是任意的)
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
}
...
}https://stackoverflow.com/questions/61621460
复制相似问题