android gradle plugin でAop(2017/10時点)

あとで追記予定

はじめに

また仕事でAOPを使いたくなったので、再度調べてみた

というか、

  • 関数の開始終了ログ
  • 処理時間のログ

がほしいみたいなエビデンス欲しがる要望いつも多いよな・・・(苦笑

以前の記事は

動作環境

  • Windows 10
  • 8G
  • AS 3.0-RC2
  • gradle plugin 2.3.3
  • gradle runtime-4.1-bin

利用プラグイン

以前と同じく

を利用。

記述は以前のDemo Project記述では動かず、公式サイトの記載に修正すること*1

  • root/build.gradle
buildscript {
    repositories {
        jcenter()  //★ココのみでOKでした
    }
    dependencies {
        classpath 'com.hujiang.aspectjx:gradle-android-plugin-aspectjx:1.0.11'
    }
}
  • app/build.gradle
apply plugin: 'android-aspectjx'

で基本利用

動かない記述は?

excludeJarFilterの記述、ダブルクオート記述だとなぜかダメ。。。

以前より進化していて、下記もサポート(以前はモジュール名のみ)

  • group名 指定
  • .jar 指定(物理名指定)

基本aopやりたいのって src以下の修正コードだけだと思うので

dependencies系は全部除外フィルターにれたほうが動作安定するよう*2

  • app/build.gradle (OK)
aspectjx {
    excludeJarFilter 'com.android.support'
    //excludeJarFilter 'com.android.support' , 'gson' , '.jar'
}
  • app/build.gradle (NG)
aspectjx {
    excludeJarFilter "com.android.support"
}

検証状況

gradle runtime 4.1 まででしか動かない

plugin内部で使ってる org.gradle.Clock のコンストラクタが 4.2から引数ありになったのでエラーになります

3.0対応をしたコミットがあるが、、

3.0-betaで内部仕様がガラッと変わってPluginが動かなくなったというissueがあり

plugin 2.3.3で動作は確認

Java8で動かせる?

aspectJ自体がJava8対応してないみたいなので無理

InstantRunでつかえる?

ビルド時にエラーになるのでOFFにしてつかってください

AOP系は結構不安定になりますね(下記あたりのライブラリもよく)

  • data-binding
  • permission-dispatcher

*1:Demo版の記述だと正常動作しない

*2:つかった時の体感。下手に記述を残すとビルドが凄く時間かかる