我想通过 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