2012-02-28 1 views
8

私はGuiceのダウンロードページで、guice-no-aopというモジュールを見ています。そのモジュールの意図は明らかにAndroid開発者向けのマーケティングです。いくつかのオンライン検索では、RoboGuiceのようなライブラリはAOPベースのIoCと似ています。いくつかの記事でも素晴らしいコード例が得られます。Guiceは、Guice-no-aop以外のAndroidで実行できないのはなぜですか?

私の質問は、なぜGuiceはこれらの特別なライブラリがないAndroidアプリで動作しないのですか?私はGuiceのサイト/ wiki上で何かを見つけることを期待していましたが、驚いたことに、単一の理由を見つけることができませんでした。

誰でも知っていますか?この質問へ

編集
補助は、1より広範です:

  • アンドロイド上では動作しません、他のどのようなJavaフレームワーク?!?! (どのような経験則ですか?)

答えて

3

This pageには、サポートされていない標準パッケージがいくつか記載されています。これらのパッケージに依存している何もありそう働かない...

これらのパッケージをサポートしていませんが、通常、Java 2プラットフォームのStandard Editionの一部、アンドロイドでサポートされていません。

  • 持つ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.xml除く
  • のjavax.transactionのjavax.xmlを(javax.swingの
  • javax.security.sasl
  • 。パーサ)
  • org.ietf。*
  • org.omg。*
  • org.w3c.domの。*(サブパッケージ)

また、すでに指摘したように、実行時にバイトコード製織に依存するAOPは機能しません(すべてではありません。 Spring AOP)。

3

AOPは実行時にバイトコードウィービングを行います。 AndroidsのDalvikマシンは、まっすぐなJVMバイトコードを実行しません。彼らはそれの翻訳版を実行します。私はRoboguiceと呼ばれるGuiceのAndroid版を使い、好きだった。 http://code.google.com/p/roboguice/これはAOPを実行せず、あなたのアクティビティはRoboActivityというRoboGuiceアクティビティから継承します。これは、その時点のアクティビティのライフサイクルに基づいて実際の注入を行います。

P.S.ほとんどのmockingフレームワークもバイトコード生成を行い、うまく動作しないか、完全には動作しません。

+4

FYI、クラスのモックがAndroidに登場しました。 http://code.google.com/p/mockito/issues/detail?id=308 –

3

比較表hereをご覧ください。 Guice 2.0と1.0用ですが、Guice 3にも適用されます。

GuiceとAOPとの主な機能の違いは、メソッドインターセプタです。アノテーションを処理するためにguiceでバインドしたメソッドに基づいて、あなたは意図したことを実行するためにコードを生成します。 GuysがAndroid上で行うことはできないランタイムコード生成です.Dalvikバイトコードをオンザフライで生成するAPIはまだありません。

+5

最近、実行時にDalvikバイトコードを生成するためのAPIを作成しました。 http://code.google.com/p/dexmaker/ –

+0

@JesseWilsonあなたたちとガールは素晴らしいです! –

関連する問題