2014-09-03 18 views
5

Ho lavorato su un semplice processore di annotazione java che estende AbstractProcessor.Come utilizzare un processore di annotazione Java personalizzato in Gradle?

Sono stato in grado di testare con successo questo utilizzando javac -Processor MyProcessor mySource.java

Il problema sta integrando questo in una semplice applicazione Ciao mondo Android con Android Studio.

Ho iniziato creando un nuovo progetto Android, quindi aggiungendo un modulo separato in cui ho inserito tutto il codice del mio codice di annotazione (la classe MyProcessor e l'annotazione personalizzata che utilizza).

Ho quindi aggiunto questo nuovo modulo come dipendenza del progetto Android HelloWorld.

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile project(':MyProcessorModule') 
} 

Come faccio quindi a utilizzare il processore per generare codice basato su tutti i file di origine nell'applicazione HelloWorld?

+0

Mi manca il compilatoreArgs per Gradle che si sta utilizzando durante la compilazione manuale. – Peter

+0

hai finalmente trovato il modo giusto per fare questa cosa? –

risposta

2

c'è un plugin per farlo funzionare. Funziona perfettamente con i moduli che si trovano su Maven, non sono sicuro di file .jar locali, ma sicuramente fare un tentativo:

qui la pagina dei plugin: https://bitbucket.org/hvisser/android-apt

e qui il mio build.gradle con esso:

buildscript { 
    repositories { 
     mavenCentral() 
    } 

    dependencies { 
     ... add this classpath to your buildscript dependencies 
     classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4' 
    } 
} 

apply plugin: 'com.android.application' 
apply plugin: 'com.neenbedankt.android-apt' << apply the plugin after the android plugin 

dependencies { 
    // in dependencies you call it 
    apt 'com.company.myAnnotation:plugin:1.0-SNAPSHOT' 
    compile 'com.company.myAnnotation:api:1.0-SNAPSHOT' 

e dovrebbe funzionare.

+4

Funziona anche con i jar locali: 'file apt ('libs/locallib.jar')' – WonderCsabo

0

quello che stai facendo è perfettamente ragione, ecco un esempio di uno dei miei progetti che uso come libreria:

dependencies { 
    compile project(':boundservice') 
} 

ovviamente ciò che si dovrebbe fare anche è quello di definire il modulo è stato aggiunto il tuo biblioteca come

android-library plagin e non applicazione.

Questo dovrebbe avvenire automaticamente se lo si fa con l'New Module - option>Android Library, ma forse come questo progetto, mi pare di capire ... non ha nulla a che fare con Android si deve solo scegliere l'opzione Java Library.

Quando si esegue questa operazione e si sincronizza il file build.gradle (potrebbe essere utile anche una piccola build pulita), si dovrebbe essere in grado di utilizzare i file di classe nel progetto Android.