Tag: 协议缓冲区

Proto3的设置值等于默认值,在运行时无法识别

Proto3那样严格,并且没有required或optional字段,没有自定义的default值。 鉴于以下定义… message Order { enum Side { BID = 0; ASK = 1; } int64 time = 1; double price = 2; double volume = 3; Side side = 4; } 任何这些字段都有默认值,毕竟现在没有什么规则必须或不能在你的.build()对象之前提供。 所以,默认的time是0 , price是0.0 , side是BID ,如果你打印一个没有提供字段或者提供默认值的实例,那么运行时会把它当作从来没有提供过的,所以无法确定该值是手动设置为BID还是作为默认值。 例如,如果我们执行下面的代码(它的kotlin) Order.newBuilder() .setPrice(1.0) .setVolume(2.0) .setSide(Order.Side.BID) .build() .apply { println(this) } 我们会有这个输出 price: 1.0 volume: 2.0 至少这是恼人的,当你打印你的proto对象使用标准的.toString()或JSON打印机,你将有这个裁剪输出… […]

kapt不能解析protobuf生成的类

在构建过程中出现这样的错误: e: /Users/some/path/SomeClass.java:86: error: cannot find symbol e: e: static ConnectionType getConnectionType(Context context) { e: ^ e: symbol: class ConnectionType e: location: class SomeClass 其中ConnectionType是由protobuf生成的类。 所以看起来像kapt不解决生成的类。 我试过了什么? 起初,我添加了kotlin-apt插件: apply plugin: 'kotlin-kapt' 然后,我添加了brotobuf生成的类到源集: sourceSets { main.java.srcDirs += 'src/main/kotlin' main.java.srcDirs += 'build/generated/source/proto/main/java' } 而且我也想在kapt开始工作之前生成类。 所以我这样命令gradle任务: afterEvaluate { def protoTasks = [] tasks.each { task -> if (task.name.contains('proto') […]

协议缓冲gradle支持Kotlin Android不工作?

我在Kotlin有一个Android项目,在那里安装正确并且可以正常工作 在root build.gradle中 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 在应用程序build.gradle apply plugin: 'kotlin-android' // … implementation"org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" 一切运作良好。 它也具有Protobuf支持按照https://github.com/google/protobuf-gradle-plugin 在应用程序build.gradle它有 apply plugin: 'com.google.protobuf' // … protobuf { protoc { // Download from repositories artifact = 'com.google.protobuf:protoc:3.0.0' } plugins { javalite { // The codegen for lite comes as a separate artifact artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0' } } generateProtoTasks { all().each { […]

如何使用Gradle建立Google协议缓冲区和Kotlin?

我正在尝试使用Gradle构建一个同时使用Google协议缓冲区和Kotlin的项目。 我想要原始文件编译成Java源代码,然后从我的Kotlin代码中调用。 我的源文件是这样排列的: src/main/proto/*.proto src/main/kotlin/*.kt src/test/kotlin/*.kt 这是我的build.gradle文件: version '1.0-SNAPSHOT' apply plugin: 'kotlin' apply plugin: 'java' apply plugin: 'com.google.protobuf' repositories { mavenCentral() maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" } } buildscript { ext.kotlin_version = '1.1-M02' repositories { mavenCentral() maven { url "http://dl.bintray.com/kotlin/kotlin-eap-1.1" } } dependencies { classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } protobuf { protoc { artifact = […]