gpt4 book ai didi

java - 如何将 google-protobuf 创建的 java 代码构建、集成和编译到 Android Studio 项目中

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:28 24 4
gpt4 key购买 nike

我一直在努力寻找一种方法将 google-protobuf 的协议(protocol)编译器生成的 java 代码集成到 Android Studio 项目中。

protoc --java_out=.  Navigation.proto

Navigation.proto 包含:

syntax = "proto3";
option java_generic_services = true;
message Navigation {
string name = 1;
string url = 2;
}

service NavRPC {
rpc putNavigation(Navigation) returns (Navigation);
};

将生成一个 java 类 (Navigation.java),但该类引用的包不存在于 Android Studio 中的库(应用程序或外部)列表中。

我尝试在 Android Studio 中通过项目结构的依赖项选项卡从 Maven Central 安装库 - 但我不断收到错误消息,其中包括:

Error:(116, 79) error: incompatible types: IOException cannot be converted to String
Error:(261, 36) error: cannot find symbol method parseWithIOException(Parser<NavDrawerElement>,InputStream)
Error:(266, 36) error: cannot find symbol method parseWithIOException(Parser<NavDrawerElement>,InputStream,ExtensionRegistryLite)
Error:(269, 36) error: cannot find symbol method parseDelimitedWithIOException(Parser<NavDrawerElement>,InputStream)
Error:(274, 36) error: cannot find symbol method parseDelimitedWithIOException(Parser<NavDrawerElement>,InputStream,ExtensionRegistryLite)
Error:(278, 36) error: cannot find symbol method parseWithIOException(Parser<NavDrawerElement>,CodedInputStream)

对 Java、Android Studio 和 Maven 有点陌生——我不确定为什么会出现这些错误。这些库显示在外部库列表中,但我不断收到 Unresolved 依赖项和错误,这些似乎表明并非如此。

最佳答案

我发现一个真正适合我的解决方案是构建 google-protobuf jar 文件,然后添加到我的项目库中。

要在 MacOS 中构建这些 jar 文件,必须正确安装、配置和设置多种技术/包。

JDK 1.8

在 MacOSX 中有一个实用程序 (/usr/libexec/java_home) 可以用于生成正确的 JAVA_HOME 环境变量。

我修改了我的 .bashrc 文件以包括:

export JAVA_HOME=`/usr/libexec/java_home -v 1.8`

如果您系统上安装的 MacOSX 版本基于 10.6,那么默认的jdk是1.6版本。新版本的java和jdk可以从系统偏好设置/java/java小程序安装,但是安装后,仍然需要设置JAVA_HOME指向到您要使用的版本。

这是因为一台mac上可以存在多个java版本,而更新实用程序不会尝试猜测您是否需要最新版本。

行家 3.3.8

我使用 MacPorts 安装 maven3。在过程中安装 maven3,我必须更新端口和所有相关的软件包以消除警告[关于过时的包]。

我尝试使用“sudo ports”进行更新安装,但保留了遇到问题。所以我最终使用了“sudo bash”。

执行的命令:

sudo bash
ports selfupdate
ports install maven3
ports update

google-protobuf

我从谷歌下载了 protobuf-master 并构建了 protoc。

我无法弄清楚为什么我希望构建的 jar 文件不是,这就是提示安装和更新的原因(上图)

一旦我有了正确的 jdk 并安装了 maven,我就能够切换到 java 目录并安装 maven3

执行的命令:

mvn3 install
mvn3 package

我不知道安装和打包之间是否/有什么区别 -但同时运行两者似乎并没有什么坏处。

编译.proto文件

我使用了一个简单的 .proto 文件,其中包含多种消息类型和RPC 服务的定义:

syntax = "proto3";
option java_generic_services = true;
message Navigation {
string name = 1;
string url = 2;
};

service NavRPC {
rpc putMessage(Navigation) returns (Navigation);
}

编译

protoc --java_out=$PROJECT_DIR/path/to/package/Navigation.java \
Navigation.proto

安卓工作室

为了让 Protocol Buffer 生成的类进行编译:

我将这些文件复制到我的 lib 目录中:

protobuf-master/java/core/target/protobuf-java-3.0.0-beta-2.jar
protobuf-master/java/util/target/protobuf-java-util-3.0.0-beta-2.jar

复制这些文件后,我必须输入要添加源文件的包的名称。

我还有一些问题(比如如何制作 AndroidStudio 自动编译一个 .proto 文件),但一切正常!

关于java - 如何将 google-protobuf 创建的 java 代码构建、集成和编译到 Android Studio 项目中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35783527/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com