我想将我的应用程序的某些部分提取到库中,但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文件。在拆分之前,图书馆没有任何资源和应用程序编译得很好。
我错过了什么?
答案 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并使用它们。