2015-11-04 14 views
1

我正在將現有項目遷移到Android Studio以及新的Gradle構建系統。這個項目使用Protocol Buffers 2.6.1版本,並且我很難讓它生成.proto文件。如何讓Android Studio使用'java_out'而不是'javanano_out'

我安裝這個插件:https://plugins.gradle.org/plugin/com.google.protobuf
我在這裏跟着上設置它的說明:https://github.com/google/protobuf-gradle-plugin

更新我的項目「的build.gradle」如下:

buildscript { 
    repositories { 
     mavenCentral() 
    } 
    dependencies { 
     classpath 'com.google.protobuf:protobuf-gradle-plugin:0.7.0' 
    } 
} 

我更新模塊'build.gradle'如下:

android{ 
    ... 

    sourceSets { 
     main { 
      proto { 
       srcDir 'src/main/proto' 
      } 
     } 
    } 

    protobuf { 
     protoc { 
      path = file('../../../tools/protocolBuffers/protoc.exe') 
     } 
    } 

    ... 
} 

當我建立我得到以下呃ROR:

Error:Execution failed for task ':uidroid:generateXoomVerificationReleaseProto'. 
> protoc: stdout: . stderr: C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\build\extracted-protos\main: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\build\extracted-include-protos\main: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\src\xoomVerificationRelease\proto: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\build\extracted-protos\xoomVerificationRelease: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\build\extracted-include-protos\xoomVerificationRelease: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\src\release\proto: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\build\extracted-protos\release: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\build\extracted-include-protos\release: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\src\xoom\proto: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\build\extracted-protos\xoom: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\build\extracted-include-protos\xoom: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\src\verification\proto: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\build\extracted-protos\verification: warning: directory does not exist. 
C:\Software\Vivia\Limited\ui_test\Sourcecode\pluto\android\UIDroid\uidroid\build\extracted-include-protos\verification: warning: directory does not exist. 
--javanano_out: protoc-gen-javanano: The system cannot find the file specified. 

所以我想我有2個問題:

  1. 爲什麼它不建立在build文件夾本身的目錄?
    我似乎應該創建它,因爲它是生成的代碼。

  2. 如何讓構建使用'java_out'而不是'javanano_out'? 構建從來沒有使用java納米,雖然我不反對改變我想讓構建工作有如何之前,首先不創建許多變量。

我嘗試GitHub的頁面上一樣的招數:

{ task -> 
    task.builtins { 
    remove javanano 
    java { } 
    } 
} 

沒有成功。這只是造成了更多的錯誤,這可能是由於我沒有正確使用它,如果是這樣,請告訴我放置上述代碼的適當位置。

我想如果唯一的方法是使用javanano,那麼我怎樣才能得到它,在哪裏得到這個對我來說不是太明顯。我已經找到更多關於它的信息:https://developers.google.com/protocol-buffers並沒有太大的成功。

感謝任何人都可以幫助!

回答

0

也許你已經知道是什麼問題了,但是我最近也遇到了同樣的問題,所以讓我在這裏發佈解決方案給其他任何人。

我做了一些研究,似乎不可能阻止這個插件使用javanano。我可能是錯的,所以如果有其他人有更好的信息,請與我們分享。 :)

因此,假設我們要在這裏使用javanano是我做過什麼:

首先,結賬或https://github.com/google/protobuf/tree/master/javanano下載谷歌的protobuf/javanano。 使用這些源文件創建jar歸檔(編譯* .java並從* .class文件創建jar)。將創建的jar添加到您的項目中(將其放置在libs文件夾中並修改build.gradle文件以編譯它)。

接下來,在您的構建中修改protobuf部分。gradle這個文件中使用生成的二進制文件protoc而非本地protoc:

protobuf { 
    protoc { 
     artifact = 'com.google.protobuf:protoc:3.0.0-alpha-3' 
    } 
} 

這在protobuf的-gradle這個-插件README下定製的Protobuf編譯描述:https://github.com/google/protobuf-gradle-plugin

同步並重建您的項目。這應該做到這一點。希望能幫助到你。

乾杯

相關問題