默认情况下,在gradle中注册从proto文件生成的类的包,而不是在proto文件中

时间:2018-09-21 17:31:40

标签: android gradle protocol-buffers

在我的android应用中,我使用原始文件。例如,我有原始文件Stats.proto

syntax = "proto3";
package com.me.test;

message Stat {
    string a = 1;
    string b = 2;
    string c = 3;
    string d = 4;
}

我需要在每个原始文件本身中注册程序包,这很不舒服,因为我有很多文件。我想在gradle中注册默认包,例如“ package com.me.test”,它使用我创建的每个文件。我在javanano中发现了solution

nano {
    proto {
      // Selects between --java_out and --javanano_out, default is 'java'
      mode 'javanano'
      // Options added to --java_out or --javanano_out
      option 'java_package=src/proto/simple-data.proto|my_package'
      option 'java_outer_classname=src/proto/simple-data.proto|OuterName'
      // Apply the 'grpc' plugin defined in protobufNativeCodeGenPluginDeps
      plugin 'grpc' {
        // Options added to --grpc_out
        option 'nano=true'
      }
    }

但是我需要使用javalite

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.0.0'
    }
    plugins {
        javalite {
            artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0'
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.plugins {
                javalite { }
            }
        }
    }
}

我想有类似的逻辑

option 'java_package=src/proto/simple-data.proto|my_package'

像javalite中的javanano

我可以实现吗?

1 个答案:

答案 0 :(得分:1)

根据the doc,并假设javalite支持与java相同的功能(这很长一段时间,因为我在此插件上未找到任何文档痕迹),请尝试:

protobuf {
    protoc {
        artifact = 'com.google.protobuf:protoc:3.0.0'
    }
    plugins {
        javalite {
            artifact = 'com.google.protobuf:protoc-gen-javalite:3.0.0'
        }
    }
    generateProtoTasks {
        all().each { task ->
            task.builtins {
                remove java
            }
            task.plugins {
                javalite {
                    option 'java_package=.......'                 
                }
            }
        }
    }
}

编辑:尝试以检查对象:

task.plugins {
    javalite {
        it.properties.each { println "$it.key -> $it.value" }
    }
}