无法导入带有@IntDef注释的AAR库

4

我在我的代码库中有以下代码:

@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;
}

在Gradle中,我有一个库

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吗?

也尝试从库中移除,但没有帮助。 javadocDeps“com.android.support:support-annotations:$ supportLibraryVersion”尝试在主项目中删除@aar的库依赖项,但同样没有帮助。 - Kirill Volkov
3个回答

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/

0

一直在搜索这个问题,看起来如果库中有任何注释,库需要有一个注释项目来包含它们。不确定处理器是否需要,希望不需要,否则我将不得不从自定义注释转换为@IntDef,并使用一些静态final int。

还有一些Gradle的魔法是必要的,目前没有好的教程,但有许多拥有处理器和注释的GitHub代码。我想避免使用自定义处理器,因为我根本不需要它。

无论如何,当我最终解决这个问题时,我会尽量保持这个线程更新。


0

现在故事继续。

我不得不为注释创建一个库项目中的注释子模块,并且我不得不将@IntDef移出它,否则它将无法导入任何android注释到子模块。因此,我已经将@IntDef移动到库中,它们现在使用子模块的自定义注释。

尽管我能够构建和部署它,但是库工件无法导入,因为:

错误:找不到com.kvolkov.animatedprogressviews:annotations:未指定。在以下位置搜索:要求: 项目:> com.kvolkov.animatedprogressviews:library:1.0-RC5

我认为这是因为我现在需要将注释子模块部署为单独的工件,但我无法做到这一点,因为我无法将某些教程的代码与用于从studio部署它的bintray插件匹配的注释模块的.gradle进行匹配...

好的,这并不是结束。 如果有人感兴趣或愿意提供帮助,可以在此查看库的当前代码: https://github.com/vulko/AnimatedArcProgressView

我将非常高兴接受一些帮助或建议,因为所有关于此的信息均使用apt而不是注解处理器。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接