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

标签 android gradle annotations aar annotation-processor

我的库中有以下代码:

@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 for library 我有

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 和支持注释,但我构建仍然失败:

Error:Failed to resolve: annotationProcessor

现在我卡住了,尝试了很多方法但没有任何帮助。我无法用这个库构建主项目。 我是否需要实现任何自定义 AnnotationProcessor 才能使用 @IntDef?

最佳答案

所以我终于能够克服这个问题了!

看起来在自定义注释的情况下还需要自定义注释处理器。现在我决定跳过创建自定义注解处理器并且不使用自定义注解来使用 @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/

关于android - 无法导入带有 @IntDef 注释的 AAR 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42917005/

相关文章:

java - 为什么我会出现 OutOfMemory 异常?

安卓, Kotlin : What exactly is called here?

android - 如何在屏幕android上显示随机图像

android - Android Material UI无法更改背景

java - 原因:com.sun.jersey.api.container.ContainerException:ResourceConfig实例不包含任何根资源类

java - 使用 @Component 默认 Autowiring

android - 获取未读邮件数gmail

java - 错误 :(56, 0) 原因 : org. gradle.api.tasks.testing.Test_Decolated 无法转换为 java.lang.Class

groovy - 测量在 Groovy 类方法中花费的时间

java - 无法初始化空白的最终字段