Kotlin Androidx原型数据存储梯度设置

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 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(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源代码集: