Marcin Bak
Marcin Bak

Reputation: 41

Apt and android library plugins

I'm using apt plugin com.neenbedankt.android-apt in an android library project (com.android.library plugin). However aar that is built doesn't include apt generated files producing java.lang.NoClassDefFoundError exceptions. Any ideas? I've been thinking about adding generated directory as a sourceSet , but i haven't managed to do that.

apply plugin: 'com.android.library'
apply plugin: 'com.neenbedankt.android-apt'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
    }
}

// Idea taken from http://robertomurray.co.uk/blog/2013/gradle-android-inject-version-code-from-command-line-parameter/
def getGeneratedVersionCode = { ->
    def appVersionCode = 417
    def code = project.hasProperty('versionCode') ? versionCode.toInteger() : appVersionCode
    println "VersionCode is set to $code"
    return code
}

def getGeneratedVersionName = { ->
    def appVersionName = "0.0.1"
    def name = project.hasProperty('versionName') ? versionName : appVersionName
    println "VersionName is set to $name"
    return name
}

android {
    compileSdkVersion 22
    buildToolsVersion "22.0.1"

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 22
        versionCode getGeneratedVersionCode()
        versionName getGeneratedVersionName()
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
//  compile fileTree(dir: 'libs', include: ['*.jar'])
//  compile 'com.android.support:appcompat-v7:22.2.0'
    compile "com.android.support:support-annotations:22.2.0"
    compile 'io.reactivex:rxjava:1.0.12'
    compile 'io.reactivex:rxandroid:0.24.0'
    compile 'com.google.dagger:dagger:2.0'
    apt 'com.google.dagger:dagger-compiler:2.0'
    provided 'org.glassfish:javax.annotation:10.0-b28'
    compile 'com.squareup.retrofit:retrofit:1.6.1'
    compile 'com.squareup.okhttp:okhttp:2.2.0'
    compile 'com.squareup.okhttp:okhttp-urlconnection:2.2.0'

    androidTestCompile 'com.android.support.test:runner:0.3'
    androidTestCompile 'com.android.support.test:rules:0.3'
    androidTestApt 'com.google.dagger:dagger-compiler:2.0'
}

Upvotes: 4

Views: 670

Answers (1)

Konstantin Malikov
Konstantin Malikov

Reputation: 101

I've resolved this by adding

classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'

into build.gradle (Project: NameOfYourProject).

full code:

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.2.3'

        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

Upvotes: 1

Related Questions