Flutter Android项目拆分Proto文件后编译报错,如何修改build.gradle?
解决Protobuf多文件拆分后的Android编译错误
问题原因
编译报错是因为protoc无法正确解析导入路径。你的myfile.proto中导入语句大概率写了import "protos/shared/dependency/dependency.proto";,但当前build.gradle把../../protos设为了proto源目录,protoc会从这个目录开始查找文件,带protos/前缀的导入路径会让它去寻找不存在的../../protos/protos/shared/dependency/dependency.proto。
修改方案
1. 修正proto文件的导入语句
把myfile.proto里的导入语句改成相对protos根目录的路径:
import "shared/dependency/dependency.proto";
2. 确保build.gradle的源目录配置正确
如果原本是追加../../protos到源目录,可以保持不变;如果担心和默认的src/main/proto冲突,建议明确设置proto源目录:
android { ... sourceSets { main.java.srcDirs += 'src/main/kotlin' // 明确指定proto源目录为protos根目录,替代默认路径避免冲突 main.proto.srcDirs = ['../../protos'] } ... }
可选:调试protoc搜索路径
如果仍有问题,可以在protobuf配置中添加调试输出,确认protoc的搜索路径参数:
protobuf { protoc { if (project.hasProperty('protoc_platform')) { artifact = "com.google.protobuf:protoc:3.18.0:${protoc_platform}" } else { artifact = "com.google.protobuf:protoc:3.18.0" } } generateProtoTasks { all().each { task -> task.builtins { java { option "lite" } } // 打印protoc命令,方便排查路径问题 doFirst { println "protoc command: ${task.commandLine}" } } } }
运行编译命令后,查看输出的protoc命令,确认--proto_path参数包含../../protos,这样就能正确找到shared/dependency/dependency.proto文件。
内容的提问来源于stack exchange,提问作者Gijs Withagen
相关产品推荐
相关产品推荐

