Не удается импортировать библиотеку AAR с аннотациями @IntDef
У меня есть следующий код в моей библиотеке:
@Documented
@IntDef({OpacityAnimationType.NONE,
OpacityAnimationType.BLINKING,
OpacityAnimationType.SHINY,
OpacityAnimationType.AURA,
})
public @interface OpacityAnimationType {
int NONE = 0;
int BLINKING = 1;
int SHINY = 2;
int AURA = 3;
}
В граде для библиотеки у меня
android {
compileSdkVersion 25
buildToolsVersion "25.0.2"
defaultConfig {
minSdkVersion 16
targetSdkVersion 25
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
javaCompileOptions {
annotationProcessorOptions {
arguments = ["library" : "true"]
}
}
}
}
а также
configurations {
javadocDeps
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile "com.android.support:appcompat-v7:$supportLibraryVersion"
compile "com.android.support:support-annotations:$supportLibraryVersion"
javadocDeps "com.android.support:support-annotations:$supportLibraryVersion"
}
Который я развернул в JFrog BinTray, а затем попытался использовать его в своем приложении. Я должен исключить appcompat-v7 и support-annotations из библиотечной зависимости, но я все равно не могу выполнить сборку:
Ошибка: не удалось разрешить: annotationProcessor
Сейчас я застрял, много чего перепробовал но ничего не помогает. Я не могу построить основной проект с этой библиотекой. Нужно ли реализовывать какой-либо пользовательский AnnotationProcessor, чтобы иметь возможность использовать @IntDef's?
3 ответа
И вот наконец я смог преодолеть эту проблему!
Похоже, что в случае пользовательских аннотаций также требуется специальный процессор аннотаций. Сейчас я решил пропустить создание собственного процессора аннотаций и не использовать собственные аннотации для перечислений с @IntDef.
Но в любом случае, если ваша библиотека использует существующие аннотации и вы публикуете ее в mavenCentral или jCenter или другом репозитории и используете ее в других проектах, вам потребуется добавить немного магии в задачу javadoc.
Это начинается здесь: https://github.com/vulko/AnimatedArcProgressView/blob/master/library/build.gradle с
configurations {
javadocDeps
}
dependencies {
// ...
compile("com.android.support:support-annotations:$supportLibraryVersion") {
transitive false;
}
javadocDeps "com.android.support:support-annotations:$supportLibraryVersion"
}
и затем продолжает публикацию скрипта Gradle здесь: https://github.com/vulko/AnimatedArcProgressView/blob/master/gradle/publish-library.gradle с:
task androidJavadocs(type: Javadoc) {
source = android.sourceSets.main.java.source
// this is the magic
classpath += configurations.javadocDeps
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
В любом случае весь код можно найти здесь: https://github.com/vulko/AnimatedArcProgressView/
Поискив эту проблему, похоже, что если в библиотеке есть какие-либо аннотации, библиотека нуждается в проекте аннотаций, который будет содержать их. Не уверен насчет процессора, но, надеюсь, он не понадобится, иначе мне придется переключаться с пользовательских аннотаций на @IntDef с некоторыми статическими финальными int вместо.
Для этого требуется некоторая магическая работа, и пока нет хороших учебников, но есть куча кода на github с процессорами и аннотациями. Я бы хотел не использовать пользовательский процессор, потому что он мне просто не нужен.
В любом случае, я постараюсь сохранить эту ветку обновленной, когда мне наконец удастся решить эту проблему.
Теперь история продолжается. Мне нужно было создать подмодуль аннотаций в проекте библиотеки для аннотаций, и мне пришлось убрать из него @IntDef, иначе он не смог бы импортировать какие-либо аннотации Android в подмодуль. Поэтому я переместил @IntDef в библиотеку, и теперь они используют собственные аннотации из субмодуля.
Несмотря на то, что я могу собрать и развернуть его, артефакт библиотеки не может быть импортирован, потому что:
Ошибка: не удалось найти com.kvolkov.animatedprogressviews: аннотации: не указано. Поиск в следующих местах: Требуется: project: > com.kvolkov.animatedprogressviews:library:1.0-RC5
Я предполагаю, что это происходит потому, что мне нужно развернуть субмодуль аннотаций в качестве отдельного артефакта, чего я не могу сделать, поскольку я не смог сопоставить код из некоторого учебника для модуля.gradle of annotations с плагинами для bintray для его развертывания там из студии...
Ну, это еще не конец. Если any1 заинтересован или готов помочь, вы можете взглянуть на текущий код библиотеки здесь: https://github.com/vulko/AnimatedArcProgressView
Я был бы рад получить некоторую помощь или совет, потому что вся информация, касающаяся этого, использует apt вместо процессора аннотаций.