如何让Android Studio使用';java#u out';而不是';javanano#u out';

如何让Android Studio使用';java#u out';而不是';javanano#u out';,android,android-gradle-plugin,protocol-buffers,Android,Android Gradle Plugin,Protocol Buffers,我正在将一个现有项目迁移到Android Studio和新的gradle构建系统。这个项目使用2.6.1版的协议缓冲区,我很难让它构建.proto文件 我安装了这个插件: 我按照此处的说明进行设置: 我更新了我的项目“build.gradle”,如下所示: buildscript { repositories { mavenCentral() } dependencies { classpath 'com.google.protobuf:p

我正在将一个现有项目迁移到Android Studio和新的gradle构建系统。这个项目使用2.6.1版的协议缓冲区,我很难让它构建.proto文件

我安装了这个插件:
我按照此处的说明进行设置:

我更新了我的项目“build.gradle”,如下所示:

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

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

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

    ...
}
我更新模块“build.gradle”,如下所示:

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

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

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

    ...
}
在生成时,我遇到以下错误:

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.
所以我想我有两个问题:

  • 为什么它不在构建文件夹本身中创建目录?
    我似乎必须创建它,因为它是为生成的代码创建的

  • 如何让构建使用“java_out”而不是“javanano_out”? 这个构建从未使用过Javanano,虽然我不反对更改,但我希望让构建能够像以前一样工作,因为不需要创建很多变量

  • 我在github页面上尝试了以下技巧:

    { task ->
      task.builtins {
        remove javanano
        java { }
      }
    }
    
    没有成功。这只会导致更多的错误,这可能是由于我没有正确使用它,如果是这样,请告诉我正确的地方放置上述代码

    我想如果唯一的方法是使用javanano,那么我该如何获得它,因为在哪里获得它对我来说并不太明显。我已经在:to not most success上找到了更多关于它的信息


    谢谢任何能帮忙的人

    也许你已经知道问题出在哪里了,但我最近也遇到了同样的问题,所以让我在这里为任何一个偶然发现这个问题的人发布解决方案

    我做了一些研究,似乎不可能阻止这个插件使用javanano。我可能错了,所以如果其他人有更好的信息,请与我们分享。:)

    因此,假设我们必须使用javanano,下面是我所做的:

    首先,从中签出或下载Google protobuf/javanano。 使用这些源文件创建jar存档(编译*.java并从*.class文件创建jar)。将创建的jar添加到项目中(将其放在libs文件夹中,并修改build.gradle文件以编译它)

    接下来,修改build.gradle文件中的protobuf部分,以使用生成的protoc二进制文件而不是本地protoc:

    protobuf {
        protoc {
            artifact = 'com.google.protobuf:protoc:3.0.0-alpha-3'
        }
    }
    
    这在protobuf gradle插件自述文件中的自定义protobuf编译下进行了描述:

    同步并重新生成项目。应该这样做。希望能有帮助


    干杯

    也许你已经发现了问题所在,但我最近也遇到了同样的问题,所以让我在这里为任何遇到这个问题的人发布解决方案

    我做了一些研究,似乎不可能阻止这个插件使用javanano。我可能错了,所以如果其他人有更好的信息,请与我们分享。:)

    因此,假设我们必须使用javanano,下面是我所做的:

    首先,从中签出或下载Google protobuf/javanano。 使用这些源文件创建jar存档(编译*.java并从*.class文件创建jar)。将创建的jar添加到项目中(将其放在libs文件夹中,并修改build.gradle文件以编译它)

    接下来,修改build.gradle文件中的protobuf部分,以使用生成的protoc二进制文件而不是本地protoc:

    protobuf {
        protoc {
            artifact = 'com.google.protobuf:protoc:3.0.0-alpha-3'
        }
    }
    
    这在protobuf gradle插件自述文件中的自定义protobuf编译下进行了描述:

    同步并重新生成项目。应该这样做。希望能有帮助

    干杯