【问题标题】:Flutter/dart Protobuf: "protoc-gen-dart: Plugin output is unparseable"Flutter/dart Protobuf:“protoc-gen-dart:插件输出不可解析”
【发布时间】:2020-05-29 07:59:29
【问题描述】:

models.proto:

syntax = "proto2";
package proto;

message MessageEnvelope {
}

我运行这些命令: brew install protobuf flutter pub global activate protoc_plugin export PATH="$PATH:/Users/gintas/flutter/.pub-cache/bin" protoc --dart_out=. ./lib/models/protobuf/models.proto -I=.

我得到了这个垃圾:

--dart_out: protoc-gen-dart: 插件输出不可解析:\rz\354\014\n\"lib/models/protobuf/models.pb.dartz\305\014///\n//生成的代码。请勿修改。\n// 来源:lib/models/protobuf/models.proto\n//\n// @dart = 2.3\n// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name, return_of_invalid_type\n\nimport \'dart:core\' as $core;\n\nimport \'package:protobuf/protobuf.dart\' as $pb;\n\nclass MessageEnvelope extends $pb.GeneratedMessage {\n static final $pb.BuilderInfo i = $pb.BuilderInfo(\'MessageEnvelope\', package: const $pb.PackageName(\'proto\'), createEmptyInstance: create)\n ..hasRequiredFields = false\n ;\ n\n MessageEnvelope.() : super();\n factory MessageEnvelope() => create();\n factory MessageEnvelope.fromBuffer($core.List i, [$pb.ExtensionRegistry r = $pb .ExtensionRegistry.EMPTY]) => create()..mergeFromBuffer(i, r);\n 工厂MessageEnvelope.fromJson($core.String i, [$pb.ExtensionRegistry r = $pb.ExtensionRegistry.EMPTY]) => create()..mergeFromJson(i, r);\n MessageEnvelope clone() => MessageEnvelope() ..mergeFromMessage(this);\n MessageEnvelope copyWith(void Function(MessageEnvelope) updates) => super.copyWith((message) => updates(message as MessageEnvelope));\n $pb.BuilderInfo get info_ => i;\n @$core.pragma(\'dart2js:noInline\')\n static MessageEnvelope create() => MessageEnvelope.();\n MessageEnvelope createEmptyInstance() => create();\ n 静态 $pb.PbList createRepeated() => $pb.PbList();\n @$core.pragma(\'dart2js:noInline\')\n 静态 MessageEnvelope getDefault() => _defaultInstance ??= $pb. GeneratedMessage.$_defaultFor(create);\n static MessageEnvelope _defaultInstance;\n}\n\nz\235\002\n&lib/models/protobuf/models.pbenum.dartz\362\001///\n// 生成代码.请勿修改。\n// 来源:lib/models/protobuf/models.proto\n//\n// @dart = 2.3\n// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type\n \nz\340\002\n&lib/models/protobuf/models.pbjson.dartz\265\002///\n// 生成代码。请勿修改。\n// 来源:lib/models/protobuf/models.proto\n//\n// @dart = 2.3\n// ignore_for_file: camel_case_types,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type\n \nconst MessageEnvelope$json = const {\n \'1\': \'MessageEnvelope\',\n};\n\nz\271\002\n(lib/models/protobuf/models.pbserver.dartz\214 \002///\n// 生成的代码。请勿修改。\n// 来源:lib/models/protobuf/models.proto\n//\n// @dart = 2.3\n// ignore_for_file: camel_case_types ,non_constant_identifier_names,library_prefixes,unused_import,unused_shown_name,return_of_invalid_type\n\nexport \'models.pb.dart\';\n\n

flutter doctor -v
[✓] Flutter (Channel master, 1.19.0-2.0.pre.173, on Mac OS X 10.15.4 19E287, locale en-GB)
    • Flutter version 1.19.0-2.0.pre.173 at /Users/gintas/flutter
    • Framework revision 5663e02645 (23 hours ago), 2020-05-27 18:32:01 -0400
    • Engine revision 2663be8370
    • Dart version 2.9.0 (build 2.9.0-11.0.dev e007545c42)


[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
    • Android SDK at /Users/gintas/Library/Android/sdk
    • Platform android-29, build-tools 29.0.3
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b4-5784211)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS (Xcode 11.4.1)
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 11.4.1, Build version 11E503a
    • CocoaPods version 1.9.1

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 3.6)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin version 45.1.1
    • Dart plugin version 192.7761
    • Java version OpenJDK Runtime Environment (build 1.8.0_212-release-1586-b4-5784211)

[!] VS Code (version 1.43.2)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    ✗ Flutter extension not installed; install from
      https://marketplace.visualstudio.com/items?itemName=Dart-Code.flutter

[✓] Connected device (3 available)
    • macOS      • macOS      • darwin-x64     • Mac OS X 10.15.4 19E287
    • Web Server • web-server • web-javascript • Flutter Tools
    • Chrome     • chrome     • web-javascript • Google Chrome 83.0.4103.61

! Doctor found issues in 1 category.

如果我做protoc --java_out=. ./lib/models/protobuf/models.proto -I=.,那么Java文件就可以生成,没有错误

【问题讨论】:

    标签: flutter dart protocol-buffers


    【解决方案1】:

    将 dart 降级到之前的 2.8.4 版本对我有用

    【讨论】:

    • 您是否怀疑最新版本中存在错误?
    【解决方案2】:

    我在 Windows 上遇到了与 golang 类似的问题,protoc 无法正常工作并出现错误“插件输出不可解析”,并在输出中显示类似于程序跟踪的内容。 经过长时间的搜索,最后在进程监视器中跟踪,我发现 protoc 用于运行插件的 cmd.exe 不是系统 cmd,而是使用 go install 编译的 go 程序之一,位于 go/bin 中。 Protoc 从 PATH 获取它并使用而不是系统的 cmd。通过删除假 cmd.exe 解决的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-25
      • 2021-07-10
      • 2022-01-09
      • 1970-01-01
      • 2020-07-06
      • 2019-10-26
      • 2019-05-15
      • 2021-01-29
      相关资源
      最近更新 更多