Android Studio Giraffe配置Protobuf遇构建错误求助
问题1:版本属性不存在错误
错误原因
模块protobuf配置里用了rootProject.ext["3.21.2"]这类写法,但rootProject.ext中根本没定义名为"3.21.2"的属性——这是把版本号当成了属性名,逻辑完全搞反了。正确做法是先在项目级定义版本变量,再引用变量名,或者直接写死版本号。
修复方案
步骤1:修改项目级build.gradle.kts
在根目录的项目配置文件中添加版本变量定义:
plugins { id("com.android.application") version "8.1.4" apply false id("org.jetbrains.kotlin.android") version "1.8.10" apply false id("com.google.protobuf") version "0.8.15" apply false } // 定义版本变量 rootProject.ext.set("protobufVersion", "3.21.2") rootProject.ext.set("grpcJavaVersion", "1.47.0") rootProject.ext.set("grpcKotlinVersion", "1.3.0")
步骤2:修改模块级build.gradle.kts的protobuf配置
将错误的版本引用改为变量:
protobuf { protoc { artifact = "com.google.protobuf:protoc:${rootProject.ext["protobufVersion"]}" } plugins { id("java") { artifact = "io.grpc:protoc-gen-grpc-java:${rootProject.ext["grpcJavaVersion"]}" } id("grpc") { artifact = "io.grpc:protoc-gen-grpc-java:${rootProject.ext["grpcJavaVersion"]}" } id("grpckt") { artifact = "io.grpc:protoc-gen-grpc-kotlin:${rootProject.ext["grpcKotlinVersion"]}:jdk8@jar" } } generateProtoTasks { all().forEach { it.plugins { id("java") { option("lite") } id("grpc") { option("lite") } id("grpckt") { option("lite") } } it.builtins { id("kotlin") { option("lite") } } } } }
如果想快速解决,也可以直接写死版本号(不推荐,但能快速生效):
protobuf { protoc { artifact = "com.google.protobuf:protoc:3.21.2" } plugins { id("java") { artifact = "io.grpc:protoc-gen-grpc-java:1.47.0" } id("grpc") { artifact = "io.grpc:protoc-gen-grpc-java:1.47.0" } id("grpckt") { artifact = "io.grpc:protoc-gen-grpc-kotlin:1.3.0:jdk8@jar" } } // generateProtoTasks部分保持不变 }
问题2:sourceSets的main标红错误
错误原因
你用的是Kotlin DSL,main()是Groovy DSL的语法,Kotlin DSL中不能把main当函数调用,语法规则完全不同。
修复方案
如果需要配置Proto文件目录,正确的Kotlin DSL写法如下:
android { // 其他配置... sourceSets { // 方式1:简洁写法 main { proto { srcDir("src/main/proto") // 默认目录就是这个,可省略 } } // 方式2:标准写法 named("main") { proto { srcDir("src/main/proto") } } } }
注意:如果你的proto文件放在默认的src/main/proto目录下,不需要额外配置sourceSets,插件会自动识别。
额外优化建议
- 移除重复依赖:你的
dependencies里重复添加了com.google.protobuf:protobuf-kotlin:3.21.2,删掉其中一个。 - 版本对齐:确保Protobuf、gRPC版本互相兼容,当前配置的版本组合是兼容的,可保留。
- 升级插件:
com.google.protobuf插件可升级到最新稳定版(如0.9.4),适配Android Studio Giraffe。
内容的提问来源于stack exchange,提问作者RMartin84
相关产品推荐
相关产品推荐

