【问题标题】:Protocol Buffers with Android & Eclipse : NoClassDefFoundError带有 Android 和 Eclipse 的协议缓冲区:NoClassDefFoundError
【发布时间】:2012-12-13 13:12:43
【问题描述】:

我想通过 HttpClient 发送一些数据并尝试使用协议缓冲区。 描述符已创建,我的 .proto 文件也已编译以获取关联的 .java 文件。我在我的 Android 课程中调用这个课程没有任何问题,就像教程和自述文件一样。 Eclipse 不会抱怨任何事情。

现在我将下载的库(protobuf-2.5.0rc1 和 protoc-2.5.0rc1-win32)中的所有编译文件添加到 .jar(整个文件夹上的 javac,然后 tar cvf)。

这个 .jar 现在位于:libs + AndroidDependencies + ReferencedLibrairies。

原始文件位于 /libs 文件夹中。 在 Build Path 中,protobuf.jar 库被设置为导出。

启动应用程序运行良好,但每当我尝试使用我的 proto builder 时,我从 DDMS 获得以下信息:

12-13 13:55:54.750: E/AndroidRuntime(12647): Caused by: java.lang.NoClassDefFoundError: xxx.xxxx.xxxx.yyy.ProtoObject$Objectmsg
12-13 13:55:54.750: E/AndroidRuntime(12647):    at xxx.xxxx.xxxx.xxx.myActivity$Task.doInBackground(myActivity.java:x)
12-13 13:55:54.750: E/AndroidRuntime(12647):    at xxx.xxxx.xxxx.xxx.myActivity$Task.doInBackground(myActivity.java:x)

这是我的原型文件

package xxx.xxxx.xxxx.yyy;

option java_outer_classname="ProtoObject";

message Objectmsg {
   required int32 aaa = 1;
   required string bbb = 2;
   required string ccc = 3;
   required string ddd = 4;
   required string eee = 5; 
   repeated string fff = 6;
   repeated string ggg = 7;
   repeated string hhh = 8;
}

Android 应用中的代码

import xxx.xxxx.xxxx.yyy.ProtoObject;

...

Objectmsg omsg = ProtoObject.Objectmsg.newBuilder()
                    .setAaa(an Integer)
                    .setBbb(a String)
                    .setCcc(a String)
                    .setDdd(a String)
                    .addAllEee(an arraylist)
                    .addAllFff(an arraylist)
                    .addAllGgg(an arraylist)
                    .build();

我真的不知道我可以在哪里弄乱任何库链接。如果你们中有人知道可能缺少什么,那就太好了!

提前致谢。

编辑 ::

当我查看 dexedLibs 文件夹(在 /bin 中)时,支持库在 protobuf 为 1 kB 大时具有实际大小!

android-support-v4-4a44d81301e680a21725a9812ec65b60          132kB
protobuf-d8a49056234d83f3a745e8697859be32          1kB

【问题讨论】:

  • 您能否发布您的代码,以便更好地理解。
  • 代码已经在这里了。我可以在构建器上添加调用,但我非常怀疑这会有所帮助。
  • 我认为你发布到服务器创建一个prblm
  • 抛出 NoClassDefFoundError ?嗯……
  • 对此不确定,但是否需要使用'option java_package = "xxx.xxxx.xxxx.yyy";'在您的协议缓冲区定义中?还是协议缓冲区“包”就足够了?

标签: java android eclipse protocol-buffers noclassdeffounderror


【解决方案1】:

已解决

从一开始一切都很好,只是我没有正确构建库 jar 文件(Manifest)...

【讨论】:

  • 我想我遇到了同样的问题,你能告诉我你是如何更详细地解决它的吗?我在 dexedLibs 中的 lib 文件也只有 1kb。
  • 嗯,我是手工构建库,只是把所有东西都搞砸了。使用 Maven 提供了适当的存档及其详细清单。
猜你喜欢
  • 2010-12-15
  • 2013-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-10
  • 1970-01-01
  • 2011-09-18
相关资源
最近更新 更多