2016-03-04 109 views
4

我試圖從.proto文件中生成.java文件,該文件存儲在Android Studio的SRC文件夾下。我把下面的代碼在我的gradle這個文件,通過它似乎並沒有工作使用Square的Wire生成Protobuf java文件

apply plugin: 'com.squareup.wire' 

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

回答

2

因此,而不是使用插件的gradle我剛剛結束了使用方絲編譯罐子。以下是步驟。

  1. 下載編譯-JAR與 - 依賴從http://search.maven.org/#artifactdetails%7Ccom.squareup.wire%7Cwire-compiler%7C2.1.1%7Cjar
  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-protofilename-of-file

+0

哪個目錄?你能簡單解釋一下嗎? – abh22ishek

3

這裏有一個電線的gradle插件:https://github.com/square/wire-gradle-plugin。但是,它似乎是黃金時段的not quite ready。讓它工作起來有些麻煩。

但是,這裏有一種方法可以使用線編譯器直接從* .proto文件自動生成java代碼,並且可以執行簡單的gradle任務。我在下面提供了一個代碼片段,其中對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