2016-12-21 2 views
0

Ich möchte generierten Klassen verwenden, einen Teil meiner App in eine Bibliothek extrahieren, aber AndroidAnnotations lässt mich nicht ;-)AndroidAnnotations Bibliothek nicht von requery

Wenn ich habe:

App 
    - uses AndroidAnnotations 
    - uses requery 

Alles OK funktioniert .. aber wenn ich etwas tun, wie folgt aus:

MyLibrary 
    - uses requery 

App 
    - uses MyLibrary 
    - uses AndroidAnnotations 
    - uses requery 

AnndroidAnnotations Klassen können nicht erzeugt werden, da Annotations-Prozessor nicht von Modellen aus dem App requery (requery Modelle finden MyLibrary sind OK).

Stacktrace ist klar, übliche Sachen. Eine Menge "Fehler: kann Symbol nicht finden" für generierte Klassen mit _ und wenige "kann Symbol nicht finden" von Klassen, die von requery erzeugt werden.

stacktrace

C:\Users\TEST\Workspace\app\src\main\java\com\example\ActivityMain.java:36: error: cannot find symbol 
import com.example.network.NetworkService_; 
         ^
symbol: class NetworkService_ 
location: package com.example.network 

C:\Users\TEST\Workspace\app\src\main\java\com\example\ActivityMain.java:38: error: cannot find symbol 
import com.example.data.TestModelFromRequery; 
        ^
symbol: class TestModelFromRequery 
location: package com.example.data 

androidannotations.txt

17:59:02.343 [Daemon worker Thread 6] ERROR o.a.i.r.ProjectRClassFinder:47 - The generated pl.mp.empendium.debug.R class cannot be found 

build.gradle

dependencies { 

    compile project(':appbase') 

    compile 'io.requery:requery:1.1.0' 
    compile 'io.requery:requery-android:1.1.0' 
    annotationProcessor 'io.requery:requery-processor:1.1.0' 

    //AndroidAnnotations 
    compile "org.androidannotations:androidannotations:$aaVersion" 
    compile "org.androidannotations:androidannotations-api:$aaVersion" 
    annotationProcessor "org.androidannotations:androidannotations:$aaVersion" 
} 

ich mit "annotationProcessor" versucht haben, "vorgesehen", mit älteren gradle Plugin-Versionen und apt und nichts scheint hier zu helfen. Klassen werden generiert (ich kann sie als Dateien sehen) und von der IDE sichtbar, bereit für die Verwendung.

Ich bin mir ziemlich sicher, dass dieses Problem keine R-Datei enthält. Die Bibliothek hat keine Ressourcen und App kompiliert, bevor Split.

Was fehlt mir?

Antwort

1

Sie müssen AA sagen, dass Sie es auf einem library project laufen lassen. Wenn es nicht hilft, können Sie den Paketnamen auch explizit festlegen. Sie Sie es wie folgt tun:

android { 

    defaultConfig { 

     javaCompileOptions { 
      annotationProcessorOptions { 
       arguments = ['resourcePackageName': 'pl.mp.empendium', 
          'library': 'true'] 
      } 
     } 
    } 
} 

Wie Sie im Wiki oben verlinkten lesen können, gibt es ein Problem mit Bibliotheksprojekte: die Ide in der generierten R Klasse nicht endgültig sind, so dass Sie sie nicht benutzen in Anmerkungen. Um dieses Problem zu umgehen, können Sie die IDs als String-Konstanten gesetzt:

@Click(resName = "myButton2") 

Alternativ können Sie auch eine Gradle plugin verwenden, um endgültige R IDs zu generieren und verwendet diese.

Verwandte Themen