使用 Square 的 Wire 生成 Protobuf java 文件
Generate Protobuf java files with Square's Wire
我正在尝试从存储在 Android 工作室的 SRC 文件夹下的 .proto 文件生成 .java 文件。我将以下代码放入我的 gradle 文件中,但它似乎不起作用
apply plugin: 'com.squareup.wire'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.squareup.wire:wire-maven-plugin:2.1.1'
}
}
因此,我没有使用 gradle 插件,而是最终使用了方线编译器 jar。以下是步骤。
- 从 http://search.maven.org/#artifactdetails%7Ccom.squareup.wire%7Cwire-compiler%7C2.1.1%7Cjar
下载带有依赖项的编译器 jar
- 将jar文件放入android应用程序的根目录
转到目录并粘贴此命令
java -jar wire-compiler-2.1.1-jar-with-dependencies.jar --proto_path=directory-of-protofile --java_out=app/src/main/java/ name-of-file.proto
应该可以。确保用你拥有的任何东西替换 directory-of-protofile
和 name-of-file
。
这里有一个 gradle wire 插件:https://github.com/square/wire-gradle-plugin. However, it seems like it's not quite ready 用于黄金时段。我在让它工作时遇到了一些问题。
但是,这里有一种方法可以直接使用有线编译器和一个简单的 gradle 任务从 *.proto 文件自动生成 java 代码。我在下面提供了一个片段,其中包含对 build.gradle 的修改。根据您的源布局更改 protoPath 和 wireGeneratedPath。
def protoPath = 'src/proto'
def wireGeneratedPath = 'build/generated/source/wire'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.squareup.wire:wire-compiler:2.2.0'
}
}
android {
sourceSets {
main {
java {
include wireGeneratedPath
}
}
}
}
dependencies {
compile 'com.squareup.wire:wire-runtime:2.2.0'
// Leave this out if you're not doing integration testing...
androidTestCompile 'com.squareup.wire:wire-runtime:2.2.0'
}
// This handles the protocol buffer generation with wire
task generateWireClasses {
description = 'Generate Java classes from protocol buffer (.proto) schema files for use with squareup\'s wire library'
delete(wireGeneratedPath)
fileTree(dir: protoPath, include: '**/*.proto').each { File file ->
doLast {
javaexec {
main = 'com.squareup.wire.WireCompiler'
classpath = buildscript.configurations.classpath
args = ["--proto_path=${protoPath}", "--java_out=${wireGeneratedPath}", "${file}"]
}
}
}
}
preBuild.dependsOn generateWireClasses
我正在尝试从存储在 Android 工作室的 SRC 文件夹下的 .proto 文件生成 .java 文件。我将以下代码放入我的 gradle 文件中,但它似乎不起作用
apply plugin: 'com.squareup.wire'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.squareup.wire:wire-maven-plugin:2.1.1'
}
}
因此,我没有使用 gradle 插件,而是最终使用了方线编译器 jar。以下是步骤。
- 从 http://search.maven.org/#artifactdetails%7Ccom.squareup.wire%7Cwire-compiler%7C2.1.1%7Cjar 下载带有依赖项的编译器 jar
- 将jar文件放入android应用程序的根目录
转到目录并粘贴此命令
java -jar wire-compiler-2.1.1-jar-with-dependencies.jar --proto_path=directory-of-protofile --java_out=app/src/main/java/ name-of-file.proto
应该可以。确保用你拥有的任何东西替换 directory-of-protofile
和 name-of-file
。
这里有一个 gradle wire 插件:https://github.com/square/wire-gradle-plugin. However, it seems like it's not quite ready 用于黄金时段。我在让它工作时遇到了一些问题。
但是,这里有一种方法可以直接使用有线编译器和一个简单的 gradle 任务从 *.proto 文件自动生成 java 代码。我在下面提供了一个片段,其中包含对 build.gradle 的修改。根据您的源布局更改 protoPath 和 wireGeneratedPath。
def protoPath = 'src/proto'
def wireGeneratedPath = 'build/generated/source/wire'
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.squareup.wire:wire-compiler:2.2.0'
}
}
android {
sourceSets {
main {
java {
include wireGeneratedPath
}
}
}
}
dependencies {
compile 'com.squareup.wire:wire-runtime:2.2.0'
// Leave this out if you're not doing integration testing...
androidTestCompile 'com.squareup.wire:wire-runtime:2.2.0'
}
// This handles the protocol buffer generation with wire
task generateWireClasses {
description = 'Generate Java classes from protocol buffer (.proto) schema files for use with squareup\'s wire library'
delete(wireGeneratedPath)
fileTree(dir: protoPath, include: '**/*.proto').each { File file ->
doLast {
javaexec {
main = 'com.squareup.wire.WireCompiler'
classpath = buildscript.configurations.classpath
args = ["--proto_path=${protoPath}", "--java_out=${wireGeneratedPath}", "${file}"]
}
}
}
}
preBuild.dependsOn generateWireClasses