Kotlin Androidx原型数据存储梯度设置
我正在尝试使用Kotlin DSL(build.gradle.kts)在gradle中配置的protobuf支持来获取新的(alpha)android数据存储。第一次尝试不是从现有的xxx.proto(化名)文件生成任何java源类。protobuf插件正在生成正确的android任务,但运行它们不会生成任何内容,因此显然默认设置没有找到我的初始xxx.proto文件所在的目录。现有的文档在gradle设置上很薄,特别是对于Kotlin gradle DSL(到目前为止,google提供的大部分gradle文档都是针对groovy的),我最初尝试定义xxx.proto文件的位置时没有用Kotlin Androidx原型数据存储梯度设置,kotlin,gradle,androidx,datastore,Kotlin,Gradle,Androidx,Datastore,我正在尝试使用Kotlin DSL(build.gradle.kts)在gradle中配置的protobuf支持来获取新的(alpha)android数据存储。第一次尝试不是从现有的xxx.proto(化名)文件生成任何java源类。protobuf插件正在生成正确的android任务,但运行它们不会生成任何内容,因此显然默认设置没有找到我的初始xxx.proto文件所在的目录。现有的文档在gradle设置上很薄,特别是对于Kotlin gradle DSL(到目前为止,google提供的大部分
是否有人或有人见过使用Kotlin(build.gradle.kts)为.proto文件指定自定义源目录的gradle配置工作?经过一些实验和挣扎后,该配置工作正常,但涉及到黑客攻击。如果有人能提出改进建议,我们将不胜感激。如果这很有用,下面是工作设置中的配置代码段。模块是kotlin 1.4.21-2多平台,以android、ios64和jvm为目标,并计划了更多功能。它具有源目录的KMP默认设置: proto文件位于src/androidMain/proto子目录中 build.gradle.kts代码段如下。所有更改都在android的
块中,当然除了插件:
plugins {
id("com.android.library")
kotlin("multiplatform")
id("kotlinx-atomicfu")
kotlin("plugin.serialization") version Versions.kotlinVersion
id("com.google.protobuf") version "0.8.14"
}
...
kotlin {
... no changes here
}
...
android {
...
sourceSets {
...
getByName("main") {
manifest.srcFile("src/androidMain/AndroidManifest.xml")
java.srcDirs("src/androidMain/kotlin")
assets.srcDirs(File("src/commonMain/resources"))
withGroovyBuilder {
"proto" {
"srcDir" ("src/androidMain/proto")
}
}
}
}
protobuf {
protoc {
artifact = "com.google.protobuf:protoc:4.0.0-rc-2"
}
plugins {
id("javalite") { artifact = "com.google.protobuf:protoc-gen-javalite:3.0.0" }
}
generateProtoTasks {
all().forEach { task ->
task.builtins {
id("java") {
option("lite")
}
}
task.plugins{
}
}
}
}
dependencies {
api("com.google.protobuf:protobuf-javalite:4.0.0-rc-2")
implementation("androidx.datastore:datastore:1.0.0-alpha05")
...
}
}
请注意android源集中的withGroovyBuilder
hack-插件需要srcdir定义才能找到我拥有的.proto文件,但在当前版本的插件中,我无法找到正确的Kotlin DSL语法。似乎插件需要定义一个Kotlin扩展函数才能更好地工作
如果数据存储可以使用kotlinx.serialization提供的protobuf序列化,而不需要这些东西,并一起跳过gradle中的java代码生成步骤,那就太好了。但我相信这是今后的事
无论如何,如果有人有改进等,请提前感谢。为了澄清,build.gradle.kts需要特定于android。google插件在这个链接上有seom内容,但它是针对java的,部分内容不适用于android源代码集: