4

我正在尝试从我存储在 Android Studio 的 SRC 文件夹下的 .proto 文件生成 .java 文件。我将以下代码放在我的 gradle 文件中,因为它似乎不起作用

apply plugin: 'com.squareup.wire'

buildscript {
  repositories {
    mavenCentral()
  }
  dependencies {
    classpath 'com.squareup.wire:wire-maven-plugin:2.1.1'
  }
}
4

2 回答 2

5

这里有一个用于电线的 gradle 插件:https ://github.com/square/wire-gradle-plugin 。但是,它似乎还没有为黄金时段做好准备。我在让它工作时遇到了一些麻烦。

但是,这里有一种方法可以直接使用线编译器和一个简单的 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
于 2016-09-28T16:51:32.003 回答
2

因此,我最终没有使用 gradle 插件,而是使用了方线编译器 jar。以下是步骤。

  1. 从http://search.maven.org/#artifactdetails%7Ccom.squareup.wire%7Cwire-compiler%7C2.1.1%7Cjar下载 compiler-jar-with-dependencies
  2. 将jar文件放入android应用程序的根目录
  3. 转到目录并粘贴此命令

    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-protofileand替换为name-of-file您拥有的任何内容。

于 2016-03-05T01:09:09.527 回答