代码之家  ›  专栏  ›  技术社区  ›  kwogger

Android和协议缓冲区

  •  7
  • kwogger  · 技术社区  · 15 年前

    我正在编写一个Android应用程序,它既可以存储数据,也可以使用协议缓冲区与服务器通信。然而, stock implementation 用Lite标志编译的协议缓冲区(在JAR库和生成的.java文件中)都有30 kb的开销,程序本身只有30 kb。换句话说,协议缓冲区使程序大小增加了一倍。

    在网上搜索,我发现 reference Android specific implementation . 不幸的是,它似乎没有文档,并且从标准.proto文件生成的代码与它不兼容。有人用过吗?如何从.proto文件生成用于此实现的代码?还有其他轻量的替代品吗?

    4 回复  |  直到 15 年前
        1
  •  1
  •   SJoshi    8 年前

    为了让任何人看到这条古老的线,答案是使用Square的线库。( https://github.com/square/wire )

    正如他们所说:

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

    它们也使用我认为的Lite运行时进行内部构建。

    当然还有Proguard,新的Android2.0迷你工具,[其他通用答案]等等。

        2
  •  6
  •   emmby    15 年前

    我知道这不是对你问题的直接回答,但是额外的30kb对我来说并没有那么糟糕。即使在边缘,下载也只需要1到2秒。Android的内存很紧,但不是很紧——30kb仅占可用应用程序内存空间的1/10左右。

        3
  •  2
  •   davetapley    15 年前

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

    我的意思是“使用协议缓冲区”,而不是“使用Android应用程序的协议缓冲区”。如果您已经提交到协议缓冲区,我很抱歉。

    This 站点是关于“比较JVM上序列化库的序列化性能和其他方面”。你会发现这里列出了许多备选方案。

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

        4
  •  0
  •   Henryk Konsek    13 年前

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

    〔1〕 http://developer.android.com/guide/developing/tools/proguard.html