Что делает Guice неспособным работать на Android кроме как Guice-no-aop? - PullRequest
8 голосов
/ 29 февраля 2012

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

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

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

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

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

Ответы [ 3 ]

3 голосов
/ 29 февраля 2012

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

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

3 голосов
/ 29 февраля 2012

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

Не поддерживается Эти пакеты, обычно являющиеся частью стандартной версии Java 2 Platform, не поддерживаются 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 ).

3 голосов
/ 29 февраля 2012

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

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

...