1

私はAndroidプロジェクト用の注釈プロセッサを作成しており、状況に遭っています。ライブラリモジュールから注釈付きのクラスを処理したいと思います。つまり、appモジュールはライブラリモジュールに依存しており、ライブラリモジュールから注釈付きのクラスを処理する必要があります。注釈処理サードパーティのライブラリ

しかし、アノテーションプロセッサは、おそらくコードがコンパイルされているため、アノテーションを依存関係から「見る」ことができません。別のライブラリの問題については、hereを参照してください。私のプロジェクトの問題のデモンストレーションは支店hereにあります。 sampleモジュールのアノテーションは処理されますが、libモジュールのアノテーションは処理されません。

これはすべてうまくいきました。この機能がなくても私は辞めてしまいましたが、Androidデータバインディングライブラリはモジュールやサードパーティライブラリのアノテーションを処理できます。 Thisライブラリは、例えば、アプリケーションによって細かく処理される@BindingAdapterメソッドを提供します。

私は利用していないアノテーションの保存タイプを設定して遊びました。私が見ることができる唯一の重要な違いは、メソッドがクラス(型)をターゲットにしている間に、データバインディングプロセッサがメソッドをターゲットにしていることですが、プロセッサと違いはないと思います。だから、私はそれがデータバインディングプロセッサーは、Androidプラグインの一部であるかもしれないが、私はここでどのように役立つか分からないと思っています。

誰でもこれがどのように行われたか知っていますか?

+0

私は少しあなたの質問で混乱しています。あなたが望むことをしないような例がありますか?保持ポリシーがランタイムである限り、コンパイルされているかどうかは、私が知っている限り重要ではありません。 –

+0

私は、ランタイムプロセッサのアノテーションについては問題ではありませんが、パフォーマンス上の理由から、Androidでより一般的に使用されるパターンであるコンパイル時のプロセッサアノテーションについてはそうであると理解しています。私は現在サンプルプロジェクトを設定していませんが、私が参照しているプロジェクトで参照しているClassIndexプロジェクトを含め、参照されている問題で説明した問題を示す必要があります。 –

+0

"*注釈プロセッサは依存関係から注釈を「見る」ことができません。おそらくコードが既にコンパイルされているからです。*" - あなたが私たちから与えたリンクの返答は "*カスタムプロセッサはあなたはその返事を読まなかったようです。あなたの問題を解決する可能性のある情報が含まれている可能性があります。 –

答えて

2

Androidのデータバインディングでは、依存関係の注釈も処理できません。代わりに、ライブラリのコンパイル時にライブラリを処理し、アーカイブの一部として中間ファイルに情報を保存します(例:jarファイル)。その後、アノテーションを読み込む代わりに、中間ファイル情報を依存関係からロードします。

jarファイルの依存関係のリソースとして中間情報を保存すると、jarファイルからかなり簡単に引き出すことができます。私が正しくリコールすれば、それはあなたのクラスパスにあるはずで、ClassLoaderのgetResource()メソッドを使うことができます。中間ファイル情報を格納するためにjarファイルを使用しないので、私のメモリは少し古くなるかもしれません。

+0

私はそれについても考えましたが、データバインディングで生成されたファイルはコンパイル時にプラグインによって書き込まれるため、(依存関係の)リソースファイルは、プラグインによって読み込まれる必要があるため、生成されたファイルこれは、ビルド時に、依存関係のアセットがプラグインで使用できることを意味しますか?私はそれが事実であるとは思わなかったでしょう。 –

+0

はい、アセットはビルド時にアプリケーションで使用できます。すべてのリソースは、アプリケーションからアクセスできるようにマージする必要があります。 –

関連する問題