我正在编写一个Android应用程序,它既可以存储数据,也可以使用协议缓冲区与服务器通信。但是,使用LITE标志(在JAR库和生成的.java文件中)编译的stock implementation协议缓冲区的开销约为30 KB,其中程序本身仅为~30 KB。换句话说,协议缓冲区使程序大小加倍。
在线搜索,我找到reference到Android specific implementation。不幸的是,它似乎没有文档,并且从标准.proto文件生成的代码与它不兼容。有人用过吗?如何从.proto文件生成此实现的代码?还有其他轻量级替代品吗?
答案 0 :(得分:6)
我知道这不是你问题的直接答案,但额外的30kb对我来说听起来并不坏。即使在EDGE上,下载也只需要1到2秒。 Android上的内存很紧,但并不紧张 - 30 kb只占可用应用程序内存空间百分之一的十分之一。
答案 1 :(得分:2)
还有其他轻量级替代品吗?
我认为这意味着“使用协议缓冲区”,而不是“使用带有Android应用程序的协议缓冲区”。如果您已经提交协议缓冲区,我会道歉。
This站点是关于“比较序列化性能和JVM上序列化库的其他方面”。你会在那里找到很多替代品。
虽然目前还没有提到不同实现的内存占用,但我确信它是维基人员会感兴趣的指标。
答案 2 :(得分:1)
只是为任何看到它的人重振这个古老的线程,答案是使用Square的Wire库(https://github.com/square/wire)
他们自己提到:
有线消息声明公共最终字段而不是通常的getter方法。这减少了生成的代码和执行的代码。更少的代码对Android程序特别有用。
他们也在内部使用我认为的Lite运行时构建。
当然还有Proguard,新的Android 2.0缩小工具,[其他通用答案]等等。
答案 3 :(得分:0)
在项目中使用ProGuard [1]。它将减少APK文件中包含的jar的大小。
[1] http://developer.android.com/guide/developing/tools/proguard.html