无法使用@IntDef注释导入AAR库

时间:2017-03-21 01:49:12

标签: android gradle annotations aar annotation-processor

我的库中有以下代码:

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"]
            }
        }
    }
}

在图书馆的gradle我有

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"
}

{{1}}

我将其部署到JFrog BinTray,然后尝试在我的应用中使用它。我必须从库依赖项中排除appcompat-v7和support-annotations,但我的构建仍然失败:

  

错误:无法解决:annotationProcessor

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

3 个答案:

答案 0 :(得分: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 with:

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/

答案 1 :(得分:0)

一直在谷歌搜索这个问题,看起来如果库中有任何注释,库需要一个包含那些注释项目的注释项目。虽然不确定处理器,但希望它不需要,否则我将不得不用自定义注释切换到@IntDef而不是一些静态的最终int。

还有一些gradle魔法需要这样做,到目前为止还没有很好的教程,但是github上的一堆代码带有处理器和注释。我想避免使用自定义处理器,因为我根本不需要它。

任何方式,当我最终设法解决这个问题时,我会尝试更新此主题。

答案 2 :(得分:0)

现在故事还在继续。 我不得不在库项目中为注释创建一个注释子模块,我不得不将@ IntDef移出它,否则它将无法将任何android注释导入子模块。所以我把@ IntDef移到了库中,他们现在使用子模块的自定义注释。

即使我能够构建和部署它,也无法导入库工件,原因是:

  

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

我认为发生这种情况是因为我现在需要将注释子模块部署为单独的工件,这是我无法做到的,因为我无法匹配.gradle的某些教程中的代码。带有bintray插件的annotations模块,可以从studio中部署它...

嗯,这还不是结束。 如果any1感兴趣或愿意提供帮助,您可以在这里查看当前的库代码: https://github.com/vulko/AnimatedArcProgressView

我很乐意收到一些帮助或建议,因为所有关于此的信息都使用apt而不是注释处理器。