Android:从Android强制javax上的反射实例化JNDI工厂

Android:从Android强制javax上的反射实例化JNDI工厂,android,reflection,jms,jndi,qpid,Android,Reflection,Jms,Jndi,Qpid,我正在尝试将ApacheQPID客户端、JMS和JNDI移植到Android。在传递Dalvik--core library参数以允许JMS/JNDI使用javax包之后,当运行ant调试安装目标时,我能够成功编译/构建我的QpidDroid项目。在考虑使用jarjar将javax类重新打包/重构到不同的包名称空间之前,我希望这样做 我认为这在法律上是合法的,因为我使用的是Oracle网站目前提供的旧的/第一个独立的JNDI jar。我正在使用ApacheGeronimo在Qpid中附带的JMS

我正在尝试将ApacheQPID客户端、JMS和JNDI移植到Android。在传递Dalvik--core library参数以允许JMS/JNDI使用javax包之后,当运行ant调试安装目标时,我能够成功编译/构建我的QpidDroid项目。在考虑使用jarjar将javax类重新打包/重构到不同的包名称空间之前,我希望这样做

我认为这在法律上是合法的,因为我使用的是Oracle网站目前提供的旧的/第一个独立的JNDI jar。我正在使用ApacheGeronimo在Qpid中附带的JMS jar,。。但我认为它也可以从Oracle单独下载。我的开发环境使用Android平台2.1和jdk 1.6

问题是,它目前似乎无法实例化我的自定义jndi连接工厂:PropertiesFileInitialContextFactory。这是我的QpidDroid项目中的.java源文件(不是libs jar中的.class)(我从qpidClient jar中提取了该类)

有人知道为什么不能在这里实例化它吗?我想知道proguard是否会打破反射,。。。但我正在用调试ant任务构建它,。。所以我认为proguard根本不应该跑。在emulator上运行已安装的应用程序时发生异常。我让ApacheQPID服务在使用默认端口的同一台机器上运行

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)
01-18 18:05:16.966:W/System.err(296):[根异常为java.lang.ClassNotFoundException:org.apache.qpid.jndi.PropertiesFileInitialContextFactory]javax.naming.NoInitialContextException:无法实例化类:org.apache.qpid.jndi.PropertiesFileInitialContextFactory
01-18 18:05:17.006:W/System.err(296):位于javax.naming.spi.NamingManager.getDefaultInitialContextFactory(NamingManager.java:720)
01-18 18:05:17.006:W/System.err(296):位于javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:768)
01-18 18:05:17.016:W/System.err(296):位于javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:169)
01-18 18:05:17.016:W/System.err(296):位于javax.naming.InitialContext.(InitialContext.java:146)
01-18 18:05:17.016:W/System.err(296):位于org.rif.QpidDroid.Hello.runTest(Hello.java:56)

谢谢你的提示

我想我发现了问题所在——Android在2.3版之前的反射功能中有缺陷

我将我的QpidDroid项目移植到Android 2.3,现在看来JNDI正在使用QPID连接参数成功创建InitialContext