読者です 読者をやめる 読者になる 読者になる

techium

このブログは何かに追われないと頑張れない人たちが週一更新をノルマに技術情報を発信するブログです。もし何か調査して欲しい内容がありましたら、@kobashinG or @muchiki0226 までいただけますと気が向いたら調査するかもしれません。

AndroidのライブラリプロジェクトでHugoのログを表示する

Androidのメソッドの呼び出しなどでログを表示をアノテーションが付与されているメソッドの呼び出し時に呼び出し時の引数の表示とをログに表示するライブラリです。
ただしAndroidのライブラリプロジェクトではビルドの設定の関係でログが表示されません。

そこでライブラリプロジェクトでもHugoのログを表示する方法を紹介します。

Androidライブラリプロジェクトはビルド時にリリースビルドに標準でなってしまいます。
Hugoはリリースビルドを行うとログを表示しなくなってしまうため今回の現象が発生してしまっています。

そこでbuild.gradleを変更しデバッグビルドでビルドできるようにし、ログを表示するようにします。

まずプロジェクトのbuild.gradleを次のようにhugo-pluginを設定します。

[build.gradle]

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.0'
        classpath 'com.jakewharton.hugo:hugo-plugin:1.2.1'
    }
}

次にライブラリプロジェクトのbuild.gradleを次のように変更します。

[samplelib/build.gradle]

apply plugin: 'com.android.library'
apply plugin: 'com.jakewharton.hugo'

android {
    compileSdkVersion 24
    buildToolsVersion "24.0.0"
    publishNonDefault true

    <省略>
}

dependencies {
    <省略>
}

hugoのプラグインをapplyを追加し、publishNonDefaultをtrueにします。
publishNonDefaultは標準はfalseになっておりBuildValiantsを外部のプロジェクトの公開し、呼び出し側でコントロールすることが可能になります。
この外部からデバッグビルドかリリースビルドかを変更しながらビルドできるようにします。

次にアプリケーション側のbuild.gradleを下記のように変更します。

[app/build.gradle]

apply plugin: 'com.android.application'

android {
    <省略>
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:24.2.1'
    debugCompile    project(path: ':samplelib', configuration: 'debug' )
    releaseCompile  project(path: ':samplelib', configuration: 'release' )
}

debugCompileおよびreleaseCompileでライブラリプロジェクトを指定し、configurationでライブラリプロジェクトのBuildValiantsを指定してビルドする内容を変更することができます。

この設定を施したら準備完了です。

試しに動かしてみましょう。
ライブラリプロジェクト側のコードを下記のようにしたとします。

[Module.java]

public class Module {

    @DebugLog
    public void show(String text) {
        Log.d("techium", text);
    }

}

@DebugLogのアノテーションをメソッドに取り付けるとアノテーションをつけたメソッドが呼び出されたときにログを表示してくれるようになります。
アプリケーション側で下記のようにしたとします。

[MainActivity.java]

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Module module = new Module();
        module.show("ログテスト");
    }
}

そうした場合にアプリを立ち上げると下記のようなライブラリプロジェクト側のログが表示されるようになります。

10-03 23:12:20.621 861-861/? V/Module: ⇢ show(text="ログテスト")
10-03 23:12:20.621 861-861/? D/techium: ログテスト
10-03 23:12:20.621 861-861/? V/Module: ⇠ show [0ms]

サンプルコード

github.com