移植しようとしています: Apache Qpid クライアント、JMS、および JNDI -- Android へ。Dalvik に --core-library パラメータを渡して JMS/JNDI 用の javax パッケージを許可した後、ant デバッグ インストール ターゲットを実行すると、QpidDroid プロジェクトのコンパイル/ビルドを成功させることができます。jarjar を使用して javax クラスを別のパッケージ名前空間に再パッケージ化/リファクタリングすることを検討する前に、これを実行したいと考えています。
Oracle の Web サイトで現在提供されている古い/最初の別個の JNDI jar を使用しているため、これは法的に正当であると思います。私は Qpid で Apache Geronimo に付属の JMS jar を使用していますが、別のダウンロードとして Oracle からも入手できると思います。私の開発環境では、Android プラットフォーム 2.1 と jdk 1.6 を使用しています。
問題は、現在、カスタム JNDI 接続ファクトリをインスタンス化できないように見えることです: PropertiesFileInitialContextFactory. これは、私の QpidDroid プロジェクトの .java ソース ファイルです (libs jar の .class ではありません) (qpidClient jar からクラスを抽出しました)。
なぜここでインスタンス化できないのか、誰かが考えているでしょうか? プロガードがリフレクションを壊しているのではないかと思っていましたが、デバッグ ant タスクでビルドしているので、プロガードをまったく実行してはいけないと考えています。インストールしたアプリをエミュレーターで実行すると、例外が発生します。同じマシン上で Apache Qpid サービスを実行しており、デフォルトのポートが使用されています。
01-18 18:05:16.966: W/System.err(296): [Root exception is java.lang.ClassNotFoundException: org.apache.qpid.jndi.PropertiesFileInitialContextFactory]javax.naming.NoInitialContextException: Cannot instantiate class: org.apache.qpid.jndi.PropertiesFileInitialContextFactory
01-18 18:05:17.006: W/System.err(296): at javax.naming.spi.NamingManager.getDefaultInitialContextFactory(NamingManager.java:720)
01-18 18:05:17.006: W/System.err(296): at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:768)
01-18 18:05:17.016: W/System.err(296): at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:169)
01-18 18:05:17.016: W/System.err(296): at javax.naming.InitialContext.<init>(InitialContext.java:146)
01-18 18:05:17.016: W/System.err(296): at org.rif.QpidDroid.Hello.runTest(Hello.java:56)
ヒントをありがとう!