2

私は.class自体ではなく.javaソースファイルを変更するアスペクト指向のフレームワークを見つけようとしていましたが、これまでのところ運がありませんか? 私はそれがばかげた考えかもしれないことを知っています...しかし、私が欲しいのは、.classに貼り付けられた正確なコードを理解することです.

基本的に、巨大な Android プロジェクトにロギングやその他の側面を適用しようとしています。私は AspectJ で遊んでいましたが、問題の 1 つは、既にメソッド宣言の制限に達しており、AspectJ を追加して .apk にパックすることができないことです。ただし、AspectJ ライブラリがないと、クラス定義例外が発生しません (原因: java.lang.NoClassDefFoundError: org.aspectj.runtime.reflect.Factory)

4

1 に答える 1

1

ソースコードで動作するaspectJに相当するものを見つけることはまずありません。

あなたが望んでいるように見えるのは、アスペクト挿入を複製できる(またはロギングを行うのに十分な)ソースからソースへのプログラム変換ツールです。

実際問題として、変換システムは、指定されたJavaエンティティで変換を実行するために、Javaエンティティがどのように命名されているかを理解する必要があります。

アスペクトを適用する変換を作成する必要があります。一部のAspectJアスペクトは、制御フローを含むかなり洗練された処理を実行するため、変換の一部を記述しにくい場合があります。ロギングは比較的簡単です。

変換ツールを実行してアスペクトをソースコードベースに適用し、アスペクト化されたソースコードベースを生成します。結果として得られるコードベースはコンパイルされ、Androidコンテキストに配信されます。変換システム自体には、超過手荷物として含まれるものはありません。アスペクトの挿入の一部として、追加のライブラリに呼び出しを挿入する必要があるかもしれませんが(AspectJはサポートライブラリ "runtime.reflect.Factory"の必要性を見つけたようです)、少なくともコードが何であるかはわかっています。検査可能なソースコードがあります。実際、そのような呼び出しは変換ルール自体に直接表示されるため、ご存知でしょう。

私が知っている変換ツールのうち、Javaをネーミングのレベルまで理解し、制御フローを処理するのはDMS SoftwareReengineeringToolkitだけです。DMSは、明示的な変換ルールの形式でエンコードされたアスペクトを適用できます。

于 2013-01-11T12:16:19.733 に答える