Библиотека 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 идентификаторы и использовать их.

Другие вопросы по тегам