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


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




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

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

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

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

[code]

    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()
        }
    }
    
[/code]

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

[code]

    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"
    
    }
    
[/code]

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

[code]

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

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

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

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




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

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

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

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

[code]

    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()
        }
    }
    
[/code]

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

[code]

    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"
    
    }
    
[/code]

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

[code]

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

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

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

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

