在Android上使用MessagePack

在Android上使用MessagePack,第1张

在Android上使用MessagePack (希望如此)最终更新

msgpack

0.6.8
可在Android上正常使用

msgpack-rpc

0.7.0
适用于Android,但有一个警告。

具体来说,您需要

onCreate
为API级别8(Android 2.2.1)添加以下内容,并且可能更低:

java.lang.System.setProperty("java.net.preferIPv4Stack", "true");java.lang.System.setProperty("java.net.preferIPv6Addresses", "false");

由于这个错误。

如果您想看一个简单的示例,下面是为此目的设置的两个项目

  • https://github.com/mikkoz/msgpack-android-test-server/tree/master/msgpack-android-test-server
  • https://github.com/mikkoz/msgpack-android-test-client/tree/master/msgpack-android-test-client

之前的版本

更新:从0.6.7开始, msgpack应该与Android兼容(存在一个小的依赖项排除问题)。检查以下文本以获取msgpack-
rpc(将来可能还会改编)。

注意:如果您还使用 msgpack-rpc ,则需要执行以下步骤:

  1. 从 _git://github.com/msgpack/msgpack-rpc.git_ (特别是 “ java”文件夹 )下载msgpack-rpc源。
  2. 将主要msgpack工件版本更改为您已构建的版本。
  3. org.msgpack.rpc.loop.netty.NettyEventLoop中 ,将 NioClientSocketChannelFactory 更改为 OioClientSocketChannelFactory(getWorkerExecutor())
  4. 以与主MessagePack JAR相同的方式构建MessagePack-RPC(请参阅上面的 步骤11 )。

NettyEventLoop 更换是由于这个问题:
http://markmail.org/message/ypa3nrr64kzsyfsa

重要提示: 我仅测试了 同步 通信。异步可能不起作用。


这是msgpack在以下版本之前无法与Android配合使用的原因

0.6.7

发生错误的原因是MessagePack使用了Android SDK中未包含的几个java.beans类。您可能正在使用 MessagePackBeans
批注。

这是一个类似的问题所描述的一个这里,为此,一般的解决方案中概述这里。不幸的是,在我们的情况下,它需要重建msgpack。这就是我所做的(几乎可以肯定,您可以跳过第5步和第8步,但是我还没有尝试过):

  1. https://github.com/msgpack/msgpack-java.git 下载MessagePack源。
  2. 将MessagePack源作为项目导入到IDE中。
  3. http://svn.apache.org/repos/asf/harmony/enhanced/java/trunk/classlib/modules/beans/src/main/java 下载相关软件包的Apache Harmony源。
  4. 将这些包复制到MessagePack项目的 src / main / java 文件夹中:
    • java.beans
    • java.beans.beancontext
    • org.apache.harmony.beans
    • org.apache.harmony.beans.internal.nls
  5. 在您的MessagePack项目中,删除以下类:
    • PropertyChangeListener
    • IndexedPropertyChangeEvent
    • PropertyChangeEvent
    • PropertyChangeListenerProxy
    • 物业变更支持
  6. java.beans 包重命名为其他名称,例如 custom.beans
  7. 所有 java.beans 引用更改为重命名的ID,然后再次更改,例如 custom.beans 。这 尤其 适用于 BeansFieldEntryReader (此类是原始错误的原因)。
  8. 将在 步骤5中* 删除的五个类的 custom.beans 引用更改回 java.beans* __
  9. org.apache.harmony.beans.internal.nls.Messages 类中,注释掉 setLocale 方法,并删除与之关联的导入。
  10. 删除所有仍然有错误的类, Enprer 除外 。在该类中,注释掉对已删除类的所有引用。您现在应该有一个没有错误的项目。
  11. 构建MessagePack JAR:
    • 如果您使用的是Maven,请将pom.xml中的版本更改为唯一的版本,运行具有 安装 目标的Maven build ,然后 使用该版本 在您的Android项目中添加依赖项。
    • 如果您 使用Maven,则必须使用随附的 build.xml 为Ant 运行 jar 目标。用这个替换您的Android项目中的msgpack JAR。 __
  12. 如果要发布应用程序,请记住包括有关Apache Harmony的相关法律声明。就像MessagePack一样,这是Apache许可。

那应该做。使用您的示例代码和我自己的数据类,我能够成功打包和解压缩数据。

整个重命名仪式归因于DEX编译器抱怨java。*包命名的事实。



欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5479104.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存