Apache Qpidクライアント、JMS、およびJNDIをAndroidに移植しようとしています。 Dalvikの--core-libraryパラメータを渡した後、antデバッグインストールターゲットを実行しているときに、JMS/JNDIのjavaxパッケージを許可するために、私のQpidDroidプロジェクトのコンパイル/ビルドを成功させることができました。 jarjarを使用してjavaxクラスを別のパッケージの名前空間に再パッケージ化/リファクタリングすることを検討する前に、これを行うことを望んでいます。Android:Android forcingでリフレクトからJNDIファクトリをインスタンス化する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からクラスを抽出しました)。
ここでインスタンス化できない理由を知りたい人はいますか?私はプロガードがリフレクションを破るかもしれないのだろうかと思っていましたが、私はデバッグ・アント・タスクでビルドしています。だから私はプロガードが全く動かないと思っています。エミュレータでインストールされたアプリケーションを実行すると例外が発生します。 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)
ありがとうございました!