(うまくいけば)最終更新
msgpack:0.6.8
Androidで問題なく動作します
msgpack-rpc:0.7.0
Androidで動作しますが、注意点が1つあります。
onCreate
具体的には、APIレベル8(Android 2.2.1)以下に以下を追加する必要があります。
java.lang.System.setProperty("java.net.preferIPv4Stack", "true");
java.lang.System.setProperty("java.net.preferIPv6Addresses", "false");
このバグが原因です。
簡単な例を見たい場合は、この目的のために設定された2つのプロジェクトを次に示します。
以前のバージョン
更新:0.6.7の時点で、msgpackはAndroidと互換性があるはずです(小さな依存関係の除外の問題があります)。以下のテキストでmsgpack-rpcを確認してください(これも将来的に適応される可能性があります)。
注:msgpack-rpcも使用している場合は、次の手順を実行する必要があります。
- msgpack-rpcソースをgit://github.com/msgpack/msgpack-rpc.git(具体的には「java」フォルダー)からダウンロードします。
- メインのmsgpackアーティファクトのバージョンを作成したものに変更します。
- org.msgpack.rpc.loop.netty.NettyEventLoopで、NioClientSocketChannelFactoryをOioClientSocketChannelFactory(getWorkerExecutor())に変更します。
- メインのMessagePackJARの場合と同じ方法でMessagePack-RPCをビルドします(上記のステップ11を参照)。
NettyEventLoopの置き換えは、次の問題が原因です:
http : //markmail.org/message/ypa3nrr64kzsyfsa。
重要:私は同期通信のみをテストしました。非同期が機能しない可能性があります。
そして、これがmsgpackが以前のAndroidで機能しなかった理由です0.6.7
:
エラーの理由は、MessagePackがAndroidSDKに含まれていないいくつかのjava.beansクラスを使用しているためです。おそらくMessagePackBeansアノテーションを使用しています。
これは、ここで説明されている問題と同様の問題であり、一般的な解決策がここで概説されています。残念ながら、私たちの場合、msgpackの再構築が必要です。これが私がしたことです(ステップ5と8はほぼ確実にスキップできますが、そのように試したことはありません):
- https://github.com/msgpack/msgpack-java.gitからMessagePackソースをダウンロードします。
- MessagePackソースをIDEのプロジェクトとしてインポートします。
- 関連するパッケージのApacheHarmonyソースをhttp://svn.apache.org/repos/asf/harmony/enhanced/java/trunk/classlib/modules/beans/src/main/javaからダウンロードします。
- これらのパッケージをMessagePackプロジェクトのsrc/main/javaフォルダー
にコピーします。
- java.beans
- java.beans.beancontext
- org.apache.harmony.beans
- org.apache.harmony.beans.internal.nls
- MessagePackプロジェクトで、次のクラスを削除します。
- PropertyChangeListener
- IndexedPropertyChangeEvent
- PropertyChangeEvent
- PropertyChangeListenerProxy
- PropertyChangeSupport
- java.beansパッケージの名前を、 custom.beansなどの別の名前に変更します。
- すべての java.beans参照を名前が変更されたIDに変更します。たとえば、custom.beansを再度変更します。これは特にBeansFieldEntryReaderに当てはまります(このクラスが元のエラーの理由です)。
- 手順5で削除した5つのクラスのcustom.beans参照をjava.beansに戻します。
- org.apache.harmony.beans.internal.nls.Messagesクラスで、メソッドsetLocaleをコメントアウトし、それに関連付けられているインポートを削除します。
- エンコーダーを除い て、まだエラーがあるすべてのクラスを削除します。そのクラスで、削除したクラスへのすべての参照をコメントアウトします。これで、エラーのないプロジェクトができました。
- MessagePackJARをビルドします。
- Mavenを使用している場合は、pom.xmlのバージョンを一意のものに変更し、インストール目標を指定してMavenビルドを実行してから、そのバージョンを使用してAndroidプロジェクトに依存関係を追加します。
- Mavenを使用していない場合は、付属のbuild.xmlを使用してAntのjarゴールを実行する必要があります。AndroidプロジェクトのmsgpackJARをこれに置き換えます。
- アプリを公開する場合は、ApacheHarmonyに関連する法的通知を含めることを忘れないでください。これは、MessagePackと同じようにApacheライセンスです。
それはそれをする必要があります。サンプルコードと私自身のデータクラスを使用して、データを正常にパックおよびアンパックすることができました。
名前変更の儀式全体は、DEXコンパイラがjava。*パッケージの名前付けについて不平を言うという事実によるものです。