我的用例是独一无二的。我创建了一个安装 react-native 应用程序的 Android 活动。我./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 应用程序添加了一个额外的依赖项。为了使用爱马仕,需要添加以下行
def hermesPath = "$rootDir/../../../node_modules/hermes-engine/android/";
debugImplementation files(hermesPath + "hermes-debug.aar")
releaseImplementation files(hermesPath + "hermes-release.aar")
好吧,这对我们不起作用,因为当集成应用程序尝试添加 android 活动 + 捆绑的 javascript 并对其进行实例化时,它会因缺少 hermes 依赖项而崩溃。以下是错误:UnsatisfiedLinkError: couldn't find DSO to load
。解决此问题的唯一方法是将上述依赖项从相对目录添加到父项目,这对我们来说不是一个选项。需要做的是在s3上托管hermesrelease
和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的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
}
...
}