AndroidAnnotations库无法使用requery

时间:2016-12-21 18:45:10

标签: android android-annotations android-apt

我想将我的应用程序的某些部分提取到库中,但AndroidAnnotations不会让我; - )

如果我有:

App
    - uses AndroidAnnotations
    - uses requery

一切正常......但是当我做这样的事情时:

MyLibrary
    - uses requery

App
    - uses MyLibrary
    - uses AndroidAnnotations
    - uses requery

无法生成AnndroidAnnotations类,因为注释处理器无法从App requery中找到模型(MyLibrary中的requery模型可以)。

Stacktrace很清楚,很平常。 很多"错误:找不到符号"对于带有_和少数"生成的类,找不到符号"由requery生成的类。

栈跟踪

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"
}

我已尝试使用" annotationProcessor","提供",使用较旧的gradle插件版本和apt,似乎没有任何帮助。 生成类(我可以将它们视为文件)并通过IDE可见,可以使用。

我很确定此问题不涉及R文件。在拆分之前,图书馆没有任何资源和应用程序编译得很好。

我错过了什么?

1 个答案:

答案 0 :(得分:1)

你必须告诉AA你是在library project上运行它。 如果没有帮助,您还可以明确设置包名称。 你可以这样做:

android {

    defaultConfig {

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

正如您在上面链接的wiki中所读到的,库项目存在一个问题:生成的R类中的ID不是最终的,因此您不能在注释中使用它们。要解决此问题,可以将id设置为字符串常量:

@Click(resName = "myButton2")

或者,您可以使用Gradle plugin生成最终的R ID并使用它们。