AndroidでAOP?
Twitterで@esmasuiさんにこんなものを教えて貰って愕然とした。
android-aspectj/ Google Code
ご存知の通りAndroidアプリケーションはJavaVMではなくDalvikで動作しており、AspectJが吐くJavaバイトコードはDalvik上では動かない。果たしてどのような実装にしているのか、AspectJを一からDakvik用に書きなおしたのか? とわくわくしてリポジトリを見たのだが..
Pune GTUG: Adding Aspect to Android
このブログによると、このプロジェクトの仕組みは
1. Javaコンパイラによりソースコードを.classファイルにコンパイルする
2. AspectJコンパイラにより、ポイントカットやアドバイスをウィーブ済みの.classファイルを生成する
3. 2.で生成した.classファイルを.dexファイルに変換する
これらをAntやMavenで統合し実行することでAspectJを使用可能とするもののようで、なるほどと膝を打つと同時にがっかりした。※
※ということは、AOPの醍醐味であるオンザフライで型(ある型を拡張した型)を生成することはできないってことだろう。