2017-02-15 4 views
0

カスタム注釈によって注釈が付けられたクラスやメソッドを変換/変更する方法はありますか? #バイトコード操作(ただし、デックス用)注釈によるクラス/メソッドの変換

これを行うにはどうすればよいですか?

プロキシは、私が探しているもののための適切な方法ではありません。

答えて

0

Dexファイルのベース操作は可能ですが、非常に複雑で、優れたツーリングはほとんどありません。

代わりに、クラスファイルとして表示されるときに、ビルド中にコードを計測する必要があります。それにはさまざまなツールがあります。私はByte Buddyというツールを書いています。これはMavenまたはGradleプラグインを使ってビルド中にコードを実行できるようにします。

クラスを変更するには、変更するクラスと変更方法を指定できるライブラリのPluginインターフェイスを実装する必要があります。 Byte Buddyはすべてのクラスをインライン化し、ランタイムプロキシを作成する必要はありません。

のGradleのために

、あなたはプラグインのコードを参照する構成を作成する必要があります。

configuration { 
    myPlugin 
} 
dependencies { 
    myPlugin "my:plugin:1.0" 
} 
byteBuddy { 
    transformation { 
    plugin "pkg.MyPluginImpl" 
    classpath configuration.myPlugin 
    } 
} 

私はそれはあなたがAndroidのための開発を与える使用するものであると仮定します。

+0

これをライブラリモジュールにも適用するにはどうすればよいですか?主なアプリプロジェクトのクラスのみが変換されています。 – Reymanx

+0

残念ながらそれは不可能です。ライブラリは、配置された成果物の一部ではありません。それらを再構築する必要があります。あるいは、実行時にJavaエージェントを使用する必要があります(これはAndroidでは不可能です)。 –

関連する問題