Что заставляет Guice работать на Android, кроме как Guice-no-aop?

Я вижу на странице загрузки Guice модуль, называемый guice-no-aop, чья цель явно направлена ​​на разработчиков Android. Несколько онлайн-запросов вытащили библиотеки, такие как RoboGuice, которые выглядят так же, как и IoC на основе AOP, и в нескольких статьях даже приводятся отличные примеры кода.

Но мой вопрос: почему Guice не запускается в Android-приложении без этих специальных библиотек? Я ожидал найти что-то на сайте Guic's / wiki, но, к моему удивлению, не смог найти ни одной причины.

Кто-нибудь знает?

редактировать
Вспомогательный к этому вопросу является более широким:

  • Какие другие фреймворки Java не будут работать на андроидах?!?! (Что такое эмпирическое правило?)

Solutions Collecting From Web of "Что заставляет Guice работать на Android, кроме как Guice-no-aop?"

На этой странице перечислены несколько стандартных пакетов, которые не поддерживаются. Все, что полагается на эти пакеты, скорее всего, не сработает …

Не поддерживается. Эти пакеты, обычно входящие в стандартную версию Java 2 Platform Standard, не поддерживаются Android.

  • java.applet
  • java.awt
  • java.beans
  • java.lang.management
  • java.rmi
  • javax.accessibility
  • javax.activity
  • javax.imageio
  • javax.management
  • javax.naming
  • 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 ).

AOP собирается выполнять кодирование байтового кода во время выполнения. Машина Dalvik на андроидах не управляет прямым байтовым кодом JVM. Они выполняют переведенную версию. Я использовал и любил версию Android Guice под названием roboguice. http://code.google.com/p/roboguice/ Это не АОП, а ваши действия наследуются от деятельности RoboGuice под названием RoboActivity, которая делает фактическую инъекцию на основе жизненного цикла активности в то время.

PS Большинство издевательских фреймворков также генерируют байтовый код и не будут работать или не будут работать полностью.

Посмотрите на таблицу сравнения здесь . Это для Guice 2.0 и 1.0, но он все равно должен применяться и к Guice 3.

Основное функциональное различие между Guice с АОП и без него – это методы перехватчиков. Основываясь на аннотации, которую вы используете по методу, то, что вы привязали в виде для обработки аннотации, guice будет генерировать код во время выполнения, чтобы делать то, что вы намеревались. Это генерация кода времени исполнения, которую Guice не может сделать на Android, так как нет никакого API (пока) для генерации байт-кода dalvik на лету.