在过去的几周里,我一直在尝试在一个 Android 项目中使用箭头元,幸运的是,我可以在 Arrow 社区的帮助下让它工作。
在这里,您将找到一个discussion,了解如何将箭头元集成到 android 项目中。
这里有一个指向repo 的链接,我在其中使用箭头元。这是基于箭头社区发布的最新examples。
基本上,您需要做的是创建插件,需要注意的是文件夹“create-plugin/src/main/resources/META-INF/services/”。在那里你必须创建一个名为“org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar”的文件,你需要在其中声明你的插件。
在我的仓库中关注这个link。
然后你需要在你的 app:build.grradle 中编写下一行
android {
kotlinOptions {
jvmTarget = '1.8'
freeCompilerArgs += "-Xplugin=${project.rootDir}/create-plugin/build/libs/create-plugin-all.jar"
}
}
和
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile) {
compileTask -> compileTask.dependsOn ":create-plugin:createNewPlugin"
}
然后在你的 create-pluing:build.gradle 添加下一行:
import java.nio.file.Paths
dependencies {
compileOnly "org.jetbrains.kotlin:kotlin-stdlib:1.4.10"
compileOnly "org.jetbrains.kotlin:kotlin-compiler-embeddable:$kotlin_version"
compileOnly "io.arrow-kt:compiler-plugin:1.4.10-SNAPSHOT"
}
// Create a new JAR with: Arrow Meta + new plugin
task createNewPlugin(type: Jar, dependsOn: classes) {
archiveClassifier = "all"
from 'build/classes/kotlin/main'
from 'build/resources/main'
from (
zipTree(sourceSets.main.compileClasspath.find {
it.absolutePath.contains(Paths.get("io.arrow-kt","compiler-plugin").toString())
})
) {
exclude 'META-INF/services/org.jetbrains.kotlin.compiler.plugin.ComponentRegistrar'
}
}
需要注意的是kotlin版本和箭头meta版本是有关联的。
我使用 kotlin 版本 1.4.10 和箭头编译器插件版本 1.4.10-SNAPSHOT