2

我想将我的应用程序的某些部分提取到库中,但 AndroidAnnotations 不允许我这样做;-)

如果我有:

App
    - uses AndroidAnnotations
    - uses requery

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

MyLibrary
    - uses requery

App
    - uses MyLibrary
    - uses AndroidAnnotations
    - uses requery

无法生成 AndroidAnnotations 类,因为注释处理器无法从 App 重新查询中找到模型(从 MyLibrary 重新查询模型是可以的)。

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

构建.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”、“provided”、旧的 gradle 插件版本和 apt,但这里似乎没有任何帮助。类已生成(我可以将它们视为文件)并在 IDE 中可见,可供使用。

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

我错过了什么?

4

1 回答 1

1

您必须告诉 AA 您正在图书馆项目上运行它。如果没有帮助,您还可以显式设置包名称。你可以这样做:

android {

    defaultConfig {

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

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

@Click(resName = "myButton2")

或者,您可以使用Gradle 插件生成最终RID 并使用它们。

于 2016-12-21T19:15:39.737 回答