Android和Protocol Buffers

8
我正在编写一款Android应用程序,它既可以存储数据,又可以使用协议缓冲与服务器进行通信。然而,使用LITE标志(在JAR库和生成的.java文件中)编译的协议缓冲库实现存在约30 KB的开销,而程序本身仅有约30 KB。换句话说,协议缓冲使程序大小翻了一倍。
在网上搜索后,我找到了一个参考资料,涉及一个针对Android的特定实现。不幸的是,似乎没有为其提供文档,并且从标准.proto文件生成的代码与之不兼容。是否有其他轻量级的替代方案?有人使用过它吗?如何从.proto文件为此实现生成代码?
4个回答

6

我知道这不是你问题的直接答案,但是额外增加30kb对我来说并不算太糟糕。即使在EDGE网络上,下载这个文件只需要额外1到2秒的时间。而且安卓设备的内存虽然有限,但并不是那么紧张——30 kb只占可用应用程序内存空间的约1/10。


嗯,我想问题在于实际上会使应用程序的大小增加一倍。这是有点不太吸引人的事情。 - kwogger

3
有其他轻量级的替代品吗?
我理解为“不使用协议缓冲区”,而不是“在Android应用程序中使用协议缓冲区”。如果您已经致力于协议缓冲区,我很抱歉。
这个网站是关于“比较JVM上序列化库的序列化性能和其他方面”。您将在那里找到许多替代品。
虽然目前没有提到不同实现的内存占用,但我相信维基上的人们会对此指标感兴趣。

谢谢,不是我在找的东西,但仍然是有用的信息。 - kwogger

1

为了让任何看到它的人都能恢复这个古老的帖子,答案是使用Square的Wire库(https://github.com/square/wire)

正如他们自己所提到的:

Wire消息声明公共的final字段,而不是通常的getter方法。这减少了生成的代码和执行的代码。对于Android程序来说,更少的代码特别有益。

我认为他们还在内部使用Lite运行时。

当然还有Proguard、新的Android 2.0混淆工具、[其他通用答案]等等。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接