7

我正在编写一个既可以存储数据又可以使用协议缓冲区与服务器通信的 Android 应用程序。但是,使用 LITE 标志编译的协议缓冲区的库存实现(在 JAR 库和生成的 .java 文件中)有大约 30 KB 的开销,而程序本身只有大约 30 KB。换句话说,协议缓冲区使程序大小翻了一番。

在网上搜索,我找到了一个Android 特定实现的参考。不幸的是,似乎没有它的文档,并且从标准 .proto 文件生成的代码与它不兼容。有人用过吗?如何从 .proto 文件为此实现生成代码?还有其他轻量级的替代品吗?

4

4 回答 4

6

我知道这不是您问题的直接答案,但额外的 30kb 对我来说听起来并没有那么糟糕。即使在 EDGE 上,下载也只需要额外的 1 到 2 秒。android 上的内存很紧,但没有那么紧——30 kb 仅占应用程序可用内存空间的百分之一的大约 1/10。

于 2009-11-26T07:55:03.017 回答
2

还有其他轻量级的替代品吗?

我将其理解为“使用协议缓冲区”,而不是“在 Android 应用程序中使用协议缓冲区”。如果您已经致力于协议缓冲区,我深表歉意。

这个站点是关于“在 JVM 上比较序列化性能和序列化库的其他方面”。您会发现那里列出了许多替代方案。

虽然目前没有提到不同实现的内存占用,但我确信这是 wiki 上的人们会感兴趣的指标。

于 2009-12-04T10:50:03.333 回答
1

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

正如他们自己提到的:

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

我相信他们还在内部使用 Lite 运行时构建。

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

于 2016-04-12T22:44:21.113 回答
0

在您的项目中使用 ProGuard[1]。它将减少 APK 文件中包含的 jar 的大小。

[1] http://developer.android.com/guide/developing/tools/proguard.html

于 2011-11-10T11:36:40.870 回答