Библиотека AndroidAnnotations не может использовать классы, сгенерированные по запросу
Я хочу извлечь часть своего приложения в библиотеку, но Android-аннотации не позволят мне;-)
Если у меня есть:
App
- uses AndroidAnnotations
- uses requery
Все работает хорошо.. но когда я делаю что-то вроде этого:
MyLibrary
- uses requery
App
- uses MyLibrary
- uses AndroidAnnotations
- uses requery
Классы AnndroidAnnotations не могут быть сгенерированы, потому что обработчик аннотаций не может найти модели из запроса приложения (модели запросов из 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
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 ответ
Вы должны сказать AA, что вы запускаете его в проекте библиотеки. Если это не помогает, вы также можете явно указать имя пакета. Вы можете сделать это так:
android {
defaultConfig {
javaCompileOptions {
annotationProcessorOptions {
arguments = ['resourcePackageName': 'pl.mp.empendium',
'library': 'true']
}
}
}
}
Как вы можете прочитать в вики, связанной выше, есть одна проблема с библиотечными проектами: идентификаторы в сгенерированном R
класс не является окончательным, поэтому вы не можете использовать их в аннотациях. Чтобы обойти эту проблему, вы можете установить идентификаторы как строковые константы:
@Click(resName = "myButton2")
Кроме того, вы можете использовать плагин Gradle для генерации финала R
идентификаторы и использовать их.