是什么让Guice不能在Android上运行,除非Guice没有aop



我在Guice的下载页面上看到了一个名为Guice no aop的模块,其意图显然是向Android开发者进行营销。一些在线搜索检索到了像RoboGuice这样的库,它们看起来像是在做类似的基于AOP的IoC,一些文章甚至给出了很棒的代码示例。

但我的问题是:如果没有这些特殊的库,为什么Guice不能在Android应用程序上运行?我本想在Guice的网站/wiki上找到一些东西,但令我惊讶的是,找不到任何原因。

有人知道吗?

编辑
这个问题的辅助问题是一个更广泛的问题:

  • 还有哪些Java框架不会在Androids上运行?!?!(经验法则是什么?)

此页面列出了一些不受支持的标准包。任何依赖这些包的东西都可能不起作用。。。

不支持这些软件包通常是Java 2平台标准版的一部分,Android不支持。

  • java.applet
  • java.awt
  • java.beans
  • java.lang.management
  • java.rmi
  • javax.accessibility
  • javax.activity
  • javax.imageio
  • javax.management
  • javax.nameing
  • javax.print
  • javax.rmi
  • javax.security.auth.kerberos
  • javax.security.auth.spi
  • javax.security.sasl
  • javax.swing
  • javax.transaction javax.xml(javax.xml.parsers除外)
  • org.ietf*
  • org.omg.*
  • org.w3c.dom.*(子包)

正如已经指出的那样,在运行时依赖字节码编织的AOP将不起作用(并非所有的AOP都起作用,例如Spring AOP)。

AOP将在运行时进行字节码编织。Androids上的Dalvik机器不会直接运行JVM字节码。他们运行了它的翻译版本。我使用并喜欢名为roboguice的Android版本的Guice。http://code.google.com/p/roboguice/它不执行任何AOP,您的活动继承自一个名为RoboActivity的RoboGuice活动,该活动根据当时活动的生命周期进行实际注入。

附言:大多数mocking框架也会生成字节码,不会工作或不能完全工作。

看看这里的比较表。它适用于Guice 2.0和1.0,但它也应该适用于Guice3。

带有AOP和不带有AOP的Guice之间的主要功能差异是方法拦截器。基于您在方法上使用的注释,以及您在guice中绑定的用于处理注释的内容,guice将在运行时生成代码来执行您想要的操作。这是Guice在Android上无法完成的运行时代码生成,因为目前还没有API来动态生成dalvik字节码。

最新更新