Gradle ベースの android プロジェクトで APT を使う設定

投稿者: Anonymous

Gradle ベースの android プロジェクトで APT (annotation processor, JSR 269) を使いたいのですが
どのように設定するのがお勧めでしょうか。

解決

いくつか apt 用のプラグインが公開されています。

私は com.uphyca.gradle:gradle-android-apt-plugin:0.9.4 を使用しています。

以下のように組み込んでください。

トップレベルの build.gradle で次のようにプラグインをクラスパスに追加します。

buildscript {
    repositories {
        jcenter()
        // 以下の行を追加して maven central も見るようにする
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.0.0-rc1'
        // 次の行を追加
        classpath 'com.uphyca.gradle:gradle-android-apt-plugin:0.9.4'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

また、アプリケーションやライブラリの build.gradle で、apt を使用する設定を行います。

apply plugin: 'com.android.application'
// 以下の行を追加(com.android.application よりも後に追加すること)
apply plugin: 'android-apt'

android {
    // (略)
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:21.0.2'

    // アプリに組み込むライブラリは通常通り compile に、プロセッサは apt で指定します。
    compile "net.vvakame:jsonpullparser-core:1.6.2"
    apt "net.vvakame:jsonpullparser-apt:1.6.2"

}

アノテーションプロセッサによっては、-A で追加の情報を要求するものがあります。
たとえば、Android Annotations を使用する場合は AndroidManifest.xml のパスを
指定する必要があるので以下の様なコードを build.gradle の末尾に追加してください。

// アプリケーションプロジェクトの場合。ライブラリプロジェクトの場合は
// applicationVariants を libraryVariants に変えてください。
android.applicationVariants.all { variant ->
    variant.javaCompile.options.compilerArgs += [
            '-AandroidManifestFile=' + variant.outputs.get(0).processManifest.manifestOutputFile
    ]
}

android gradle plugin 0.14.2までは variant.outputs.get(0).processManifest.manifestOutputFile の部分を、 variant.processResources.manifestFile と記述してください。

ここで紹介した以外にも同様のプラグインがあるのでリンクだけ載せておきます。

https://bitbucket.org/hvisser/android-apt

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *