368


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


CC BY-SA 3.0
2014-12-05T08:40:39.983
367
2016-10-29T03:35:55.433
2016-10-29T03:35:55.433
8000
319
question
android android-studio gradle
Gradle ベースの 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>


CC BY-SA 3.0
2014-12-05T08:40:39.983
368
2014-12-05T08:40:39.983
319
367
answer


[AndroidAnnotations](http://androidannotations.org/)をAPTで適用するapp/build.gradleの記述が下記になります。

[code]

    apt 'org.androidannotations:androidannotations:3.2'
    compile 'org.androidannotations:androidannotations-api:3.2'
    
[/code]

のあたりは利用するものに応じて書き換えてください。

[code]

    buildscript {
        repositories {
            mavenCentral()
        }
        dependencies {
            classpath 'com.android.tools.build:gradle:0.14.4'
            classpath 'com.neenbedankt.gradle.plugins:android-apt:1.+'
        }
    }
    
    repositories {
        mavenCentral()
        mavenLocal()
    }
    
    apply plugin: "com.android.application"
    apply plugin: 'android-apt'
    
    dependencies {
        apt 'org.androidannotations:androidannotations:3.2'
        compile 'org.androidannotations:androidannotations-api:3.2'
        compile fileTree(dir: 'libs', include: ['*.jar'])
    
        // その他のライブラリー
    }
    
    apt {
        arguments {
            androidManifestFile variant.outputs[0].processResources.manifestFile
            resourcePackageName android.defaultConfig.applicationId
    
            // 追加のアノテーションプロセッシングオプションを下記のように指定可能
            // logLevel 'INFO'
            // logFile '/var/log/aa.log'
        }
    }
    
    android {
        compileSdkVersion 21
        buildToolsVersion "21.1.1"
    
        defaultConfig {
            applicationId "アプリケーションID" // アプリケーションに応じて書き換える
            minSdkVersion 14
            targetSdkVersion 21
            versionCode 1
            versionName "1.0"
        }
    
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_7
            targetCompatibility JavaVersion.VERSION_1_7
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            }
        }
    
        sourceSets {
            main {
                java.srcDirs = ['src/main/java', 'build/generated/source/apt/${variant.dirName}']
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2014-12-08T04:26:49.943
437
2014-12-08T04:26:49.943
450
367
answer


「android apt」でぐぐるとこのエントリーが上位にくるので、最近(2016年10月末)の情報を追記しておきます。

`'com.neenbedankt.gradle.plugins:android-apt:1.8'`  
のリポジトリに記載がありますが、gradle
pluginのバージョン2.2で正式にアノテーションプロセッサーが導入され、追加のライブラリを入れることなくaptが使用できるようになりました。

app配下の`build.gradle`に記述するときは、次のように`annotationProcessor`で指定します。

[code]

    dependencies {
        // 中略
        annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
    }
    
[/code]


CC BY-SA 3.0
2016-10-29T02:55:46.033
29971
2016-10-29T02:55:46.033
845
367
answer