我正在尝试将 Apache Qpid Client、JMS 和 JNDI 移植到 Android。在将 --core-library 参数传递给 Dalvik 以允许 JMS/JNDI 的 javax 包之后运行 ant 调试安装目标时,我能够成功编译/构建我的 QpidDroid 项目。在考虑使用 jarjar 将 javax 类重新打包/重构到不同的包命名空间之前,我希望这样做。
我认为这是合法的,因为我使用的是 Oracle 网站目前提供的旧的/第一个单独的 JNDI jar。我在 Qpid 中使用 Apache Geronimo 附带的 JMS jar,.. 但我认为它也可以从 Oracle 单独下载。我的开发环境使用 Android 平台 2.1 和 jdk 1.6。
问题是,它目前似乎无法实例化我的自定义 jndi 连接工厂:PropertiesFileInitialContextFactory。这是我的 QpidDroid 项目中的 .java 源文件(不是 libs jar 中的 .class)(我从 qpidClient jar 中提取了类)。
有人知道为什么它不能在这里实例化吗?我想知道 proguard 是否会破坏反射,......但我正在使用调试 ant 任务构建它,......所以我认为 proguard 根本不应该运行。当我在模拟器上运行已安装的应用程序时发生异常。我在使用默认端口的同一台机器上运行 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)
感谢您的任何提示!