2012-02-28 3 views
8

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

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

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

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

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

ответ

3

This page содержит несколько стандартных пакетов, которые не поддерживаются. Все, что зависит от этих пакетов, скорее всего, не получится ...

Не поддерживается Эти пакеты, как правило, входит в состав Java 2 Platform Standard Edition, не поддерживается 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. парсеры)
  • org.ietf. *
  • org.omg. *
  • org.w3c.dom. * (суб-пакеты)

Также, как уже указывалось, АОП, основанная на перекодировании байтового кода во время выполнения, не будет работать (не все, например. Spring AOP).

3

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

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

+4

FYI, классное издевательство приближается к Android. http://code.google.com/p/mockito/issues/detail?id=308 –

3

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

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

+5

Недавно мы создали API для генерации байт-кода Dalvik во время выполнения. http://code.google.com/p/dexmaker/ –

+0

@ JesseWilson, вы, ребята и девочки, потрясающие! –

Смежные вопросы