【问题标题】:What makes Guice unable to run on Android except as Guice-no-aop?除了 Guice-no-aop 之外,是什么让 Guice 无法在 Android 上运行?
【发布时间】:2012-02-28 20:08:43
【问题描述】:

我在 Guice 的下载页面上看到一个名为 guice-no-aop 的模块,其目的显然是针对 Android 开发者进行营销。一些在线搜索拉回了像 RoboGuice 这样的库,这些库看起来像是在做类似的基于 AOP 的 IoC,还有几篇文章甚至提供了很好的代码示例。

但我的问题是:为什么 Guice 不能在没有这些特殊库的情况下在 Android 应用上运行?我原本希望在 Guice 的网站/wiki 上找到一些东西,但令我惊讶的是,找不到一个原因。

有人知道吗?

编辑
与这个问题相辅相成的是一个更广泛的问题:

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

【问题讨论】:

    标签: java android aop guice roboguice


    【解决方案1】:

    This page 列出了一些不受支持的标准包。任何依赖这些包的东西都可能无法正常工作......

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

    • java.applet
    • java.awt
    • java.beans
    • java.lang.management
    • java.rmi
    • javax.accessibility
    • javax.activity
    • javax.imageio
    • javax.management
    • javax.命名
    • 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 将不起作用(并非所有都可以,例如Spring AOP)。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      【解决方案3】:

      查看比较表here。它适用于 Guice 2.0 和 1.0,但仍应适用于 Guice 3。

      Guice 与 AOP 的主要功能区别在于方法拦截器。根据您在方法上使用的注解,即您在 guice 中绑定的用于处理注解的内容,guice 将在运行时生成代码以执行您的预期。这是 Guice 在 Android 上无法执行的运行时代码生成,因为(目前)还没有用于动态生成 dalvik 字节码的 API。

      【讨论】:

      • 我们最近创建了一个 API,用于在运行时生成 Dalvik 字节码。 code.google.com/p/dexmaker
      • @JesseWilson 你们和女孩都很棒!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-10
      • 2020-08-23
      • 2011-01-21
      • 2012-04-27
      • 2012-08-20
      相关资源
      最近更新 更多